[계산] //data.txt를 console 화면에 뿌리도록 하시오. package ThreadTest; import java.io.*; public class Test3 { public static void main(String[] args) throws IOException { Reader in = new FileReader("data.txt"); int dat = in.read(); in.close(); System.out.println(dat); } }
[결과값] 50
[계산] package ThreadTest; public class Test4 { public static void main(String[] args) { Thread3 th1 = new Thread3(); Thread4 th2 = new Thread4(); th1.start(); th2.start(); } } class Thread3 extends Thread { public void run() { for (int i = 0; i < 300; i++) System.out.printf("%s", new String("-")); } } class Thread4 extends Thread { public void run() { for (int i = 0; i < 300; i++) System.out.printf("%s", new String("|")); } }
[결과값] |||----------------------------------------------------------------------------------|||||||||||||||||--------------------------------------------------------------------------------------------------------------------------------------------------------|||||||||||||||||||||||||||||||-----------------------------------|||||||||||||||||||||||||||||||----||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||---------------------------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락(lock)을 걸어서 데이터의 일관성을 유지하는 것.
[계산] package ThreadTest; import java.io.*; import java.net.*; import java.util.*; class URLConEX { public URLConEX() { String code = null; System.out.println("웹 주소를 입력 하세요."); Scanner scanner = new Scanner(System.in); String address = scanner.next(); // https://www.naver.com/ try { URL url = new URL(address); URLConnection con = url.openConnection(); BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream())); FileWriter fw = new FileWriter("C:\\Users\\USER\\Documents\\file.html", false); while ((code = webData.readLine()) != null) { fw.write(code); } System.out.println("The End"); fw.close(); webData.close(); } catch (Exception e) { e.printStackTrace(); } } } public class URLCon { public static void main(String[] args) { new URLConEX(); } }
[결과값] 웹 주소를 입력 하세요. https://www.naver.com/ The End *네이버의 페이지 소스를 가져온다.
네트워크상에서 서로 다른 호스트 사이의 통신을 위한 수단(전화기)
Socket(server) ← I/O Stream → Socket(client)
Server : 다수를 기다리는 쪽
Client : Server에 접속하는 쪽
UTF : 유니코드를 읽어오는 것
[TCPClient : 접속] import java.net.*; public class TCPClient { public static void main(String[] args) { String serverIP = "127.0.0.1"; // local host(자기자신) try { Socket socket = new Socket(serverIP, 2400); // 2400번으로 전화거는 것 System.out.println("서버에 연결되었습니다."); Sender sender = new Sender(socket); Receiver receiver = new Receiver(socket); sender.start(); receiver.start(); } catch (Exception e) { e.printStackTrace(); } } } ======================================================================================= [TCPServer : 다수를 기다림] import java.net.*; public class TCPServer { public static void main(String[] args) { ServerSocket serverSocket = null; // server 번호 Socket socket = null; try { serverSocket = new ServerSocket(2400); // port 번호 socket = serverSocket.accept(); // 상대방의 socket을 받아내는 것 Sender sender = new Sender(socket); Receiver receiver = new Receiver(socket); sender.start(); receiver.start(); } catch (Exception e) { } } } ======================================================================================= [Sender : 보내기] import java.io.*; import java.net.*; import java.util.*; public class Sender extends Thread { Socket socket; DataOutputStream out; String name; public Sender(Socket socket) { this.socket = socket; try { out = new DataOutputStream(socket.getOutputStream()); // socket 안에 빨대가 있다. name = "[" + socket.getInetAddress() + ":" + socket.getPort() + "]"; } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { Scanner sc = new Scanner(System.in); while (out != null) { try { out.writeUTF(name + sc.nextLine()); } catch (Exception e) { e.printStackTrace(); } } } } ======================================================================================= [Receiver : 받기] import java.io.*; import java.net.*; import java.util.*; public class Receiver extends Thread { Socket socket; DataInputStream in; public Receiver(Socket socket) { this.socket = socket; try { in = new DataInputStream(socket.getInputStream()); // socket 안에 빨대가 있다. } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { while (in != null) { try { System.out.println(in.readUTF()); // UTF : 유니코드를 읽어오겠다. } catch (Exception e) { e.printStackTrace(); } } } }
[결과값] [클라이언트] 서버에 연결되었습니다. 클라이언트 [하이픈]: 서버 [서버] [하이픈]: 클라이언트 서버