190 likes | 454 Views
13. 네트워크 프로그래밍. 최종명 choijm@dreamwiz.com. 13.1 TCP/IP 이해. 프로토콜 통신을 수행하기 위한 약속 데이터 포맷 명령어 인터넷의 역사 ARPAnet TCP/IP NSFnet. 13.1 TCP/IP 이해. LAN(Local Area Network). 13.1 TCP/IP 이해. 이더넷 주소 네트워크 카드 주소 이더넷 주소 확인하는 명령어 ipconfig /all. 13.1 TCP/IP 이해. IP 주소
E N D
13. 네트워크 프로그래밍 최종명 choijm@dreamwiz.com
13.1 TCP/IP 이해 • 프로토콜 • 통신을 수행하기 위한 약속 • 데이터 포맷 • 명령어 • 인터넷의 역사 • ARPAnet • TCP/IP • NSFnet
13.1 TCP/IP 이해 • LAN(Local Area Network)
13.1 TCP/IP 이해 • 이더넷 주소 • 네트워크 카드 주소 • 이더넷 주소 확인하는 명령어 ipconfig /all
13.1 TCP/IP 이해 • IP 주소 • 4개의 점으로 구성된 논리적인 컴퓨터 주소 • 예: 218.237.236.192 • 컴퓨터 이름 • IP 주소를 사람이 기억하기 쉬운 이름으로 표현한 것 • DNS (Domain Name System) • 컴퓨터 이름을 IP 주소로 변환해주는 서버 • DNS가 작동되는 방법을 알아보는 명령어 nslookup java.sun.com
13.1 TCP/IP 이해 • 네트워크 구성 • 브로드캐스트 • 같은 네트워크에 소속된 모든 컴퓨터에 메시지를 전달하는 것
13.1 TCP/IP 이해 • ARP(Address Resolution Protocol) • IP 주소를 이더넷 주소로 변환해주는 것 • arp –a 명령어 • 라우터 • 데이터를 다른 네트워크에 전달하기 위해서 사용되는 컴퓨터 혹은 네트워크 장비 그림 3). 라우터
13.2 소켓 프로그래밍 • 소켓 그림 4). IP, 포트, 소켓
13.2 소켓 프로그래밍 • TCP 프로그램 작성
13.3 에코 프로그램 • 예제: EchoServer.java 13 public void service() throws IOException { 14 System.out.println("EchoServer is ready."); 15 Socket client = server.accept(); 16 InputStream is = client.getInputStream(); 17 OutputStream os = client.getOutputStream(); 18 ConsoleReader in = new ConsoleReader(is); 19 ConsoleWriter out = new ConsoleWriter(os); 20 while(true) { 21 String msg = in.readLine(); 22 System.out.println(msg); 23 if(msg.equals("bye")) { 24 break;
13.3 에코 프로그램 • 예제: EchoClient.java 1 import java.io.*; 2 import java.net.*; 3 4 public class EchoClient { 5 protected Socket socket; 6 7 public EchoClient(String host, int port) throws Exception { 8 socket = new Socket(host, port); 9 } …
13.3 에코 프로그램 • 예제: EchoClient.java(계속) 11 public void echo() throws IOException { 12 OutputStream os = socket.getOutputStream(); 13 InputStream is = socket.getInputStream(); 14 ConsoleReader in = new ConsoleReader(is); 15 ConsoleWriter out = new ConsoleWriter(os); 16 ConsoleReader con = new ConsoleReader(System.in); 17 while(true) { 18 String msg = con.readString(); 19 out.println(msg); 20 out.flush(); 21 if(msg.equals("bye")) { 22 break;
13.4 채팅 프로그램 • 채팅 프로그램 • ChatApplet – 채팅 애플릿 프로그램 • ChatHandler – ChatApplet의 대화 내용을 받아서 다른 ChatHandler를 통해 다른 ChatApplet에 전달한다 • ChatServer – ChatHandler들을 관리하는 프로그램
13.4 채팅 프로그램 • 예제: ChatServer.java 10 ServerSocket server = new ServerSocket (port); 11 handlers = new Vector(); 12 System.out.println("ChatServer is ready."); 13 while (true) { 14 Socket client = server.accept (); 15 if(debug) 16 System.out.println ("From: "+ 17 client.getInetAddress()); 18 ChatHandler c = new ChatHandler (this, client); 19 handlers.addElement(c); 20 c.start();
13.4 채팅 프로그램 • 예제: ChatHandler.java 13 public ChatHandler(ChatServer server, Socket s) 14 throws IOException { 15 16 this.s = s; 17 this.server = server; 18 InputStream ins = s.getInputStream(); 19 OutputStream os = s.getOutputStream(); 20 i = new BufferedReader(new InputStreamReader(ins)); 21 o = new PrintWriter(new OutputStreamWriter(os));
13.4 채팅 프로그램 • 예제: ChatHandler.java(계속) 33 try { 34 name = i.readLine(); 35 broadcast (name + "님이 방문하셨습니다."); 36 while (!stop) { 37 String msg = i.readLine(); 38 if(msg.equals("!#%&")) { 39 setStop(); 40 } else { 41 broadcast (name + " - " + msg); 42 } 43 }
13.4 채팅 프로그램 • 예제: ChatHandler.java(계속) 61 protected void broadcast (String message) { 62 synchronized (server.handlers) { 63 int n = server.handlers.size(); 64 for(int i=0; i < n; i++) { 65 ChatHandler c = (ChatHandler) 66 server.handlers.elementAt(i); 67 try { 68 synchronized (c.o) { 69 c.o.println(message); 70 } 71 c.o.flush (); 72 } catch (Exception ex) { 73 c.setStop();
13.4 채팅 프로그램 • 예제: ChatApplet.java public void run() { try { String host = getCodeBase().getHost(); Socket s = new Socket(host, 9830); InputStream ins = s.getInputStream(); OutputStream os = s.getOutputStream(); i = new BufferedReader(new InputStreamReaer(ins)); o = new PrintWriter(new OutputStreamWriter(os)); execute(); …
13.4 채팅 프로그램 • 예제: ChatApplet.java(계속) public void execute() { try { while(!stop) { String line = i.readLine(); output.append(line + "\n"); ... public void actionPerformed(ActionEvent e) { ... if(c == input) { o.println(input.getText()); o.flush(); input.setText("");