- Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1
소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소 소켓 (Socket): TCP/IP 네트워크에서양쪽응용프로그램의 TCP 연결을말함 전화의예 전화번호 : IP 주소 ; 포트번호 : 교환번호 소켓 : 전화가울리고원하는사람과통화가연결된것을의미 Host computer-i Host computer-ii 응용 Port InputStream 프로그램 Port Network 응용프로그램 Port Socket InputStream Port IP Address IP Address OutputStream 응용프로그램 OutputStream Socket Port Port 응용프로그램 TCP Programming 2 소켓소개 : 자바에서의 TCP 프로그램작성방법 자바네트워크프로그램작성패키지 java.net ServerSocket() accept() TCP Server TCP Client Socket() Connected 클라이언트와연결될때까지블록됨 I/O 스트림생성 I/O 스트림생성 write() 데이터 ( 요청 ) read() 클라이언트요청처리 read() 데이터 ( 응답 ) write() close() close() TCP Programming 3
소켓소개 : 주요클래스와메소드 ServerSocket 클래스 서버프로그램을만들때사용 ( 서버측에서사용 ) Socket 클래스 클라이언트프로그램생성시이용 ( 클라이언트측에서사용 ) TCP Programming 4 소켓소개 : 주요클래스와메소드 (cont.) ServerSocket 클래스 생성자 (Constructor) ServerSocket S (int port) ServerSocket (int port, int backlog) port: 서버소켓이사용할포트번호 포트번호는 2바이트로표현되므로 0~2 16-1 사이의값을지님 backlog: 클라이언트요청을기록할큐의크기 ( 동시연결요청시필요 ) 즉, 기록할요청의개수 backlog의사이즈보다큰연결요청이많으면크기외의클라이언트는연결되지않음 주요메소드 (pp. 44) Socket accept(): 클라이언트와의연결을기다리다연결시 Socket 객체반환 void bind(socketaddress endpoint) void close() InetAddress getinetaddress(): 서버소켓주소반환 int getsotimeout(): SO_TIMEOUT 값을반환 ; 0이면무한대를의미 boolean isclosed() void setsotimeout (int timeout): Unit: millisecond (ms.: One thousandth (10-3 ) of a second) TCP Programming 5
소켓소개 : 주요클래스와메소드 (cont.) Socket 클래스 생성자 Socket (String host, int port): 서버의주소 ( 문자열주소 ) 와포트번호 Socket (InetAddress address, int port): address는 IP 주소주요메소드 void bind (SocketAddress bindpoint) void close() void connect (SocketAddress endpoint) void connect (SocketAddress endpoint, int timeout) InetAddress getinetaddress(): 소켓이연결된곳의주소반환 InputStream getinputstream() boolean getkeepalive(): SO_KEEPALIVE의활성화여부를판단 OutputStream getoutputstream() int getport(): 소켓에연결된서버의포트번호를반환 int getsotimeout() boolean isconnected() void setsotimeout (int timeout) void shutdowninput(): 소켓의입력스트림을닫음 void shutdownoutput(): 소켓의출력스트림을닫음 TCP Programming 6 소켓소개 : HTTP 프로토콜을이용한예제 프로그램개요 HTTP 프로토콜을사용하는웹클라이언트프로그램작성 웹서버와웹브라우저는 HTTP 프로토콜을이용하므로 웹클라이언트프로그램을작성하기위해서는 HTTP 프로토콜에맞게동작하도록프로그램을작성하여야함 작성하고자하는프로그램 웹서버의디폴트페이지 (.html) 를읽어오는프로그램 웹서버에HTTP의 GET 명령어를전달함으로써구현 TCP Programming 7
소켓소개 : HTTP 프로토콜을이용한예제 (cont.) import java.io.*; import java.net.*; public class WebClient { public static void main (String[] args){ if (args.length < 1){ System.out.println("Usage: java WebClient <Web address> \n"); return; try { char data[] = new char[1024]; int len; Socket s = new Socket (args[0], 80); PrintWriter out = new PrintWriter (s.getoutputstream(), true); InputStreamReader in = new InputStreamReader (s.getinputstream()); out.println("get / HTTP/1.0"); out.println("\n"); while ( (len = in.read(data))!= -1) System.out.println(new String (data, 0, len)); catch (Exception e) { System.out.println(e); TCP Programming 8 소켓소개 : HTTP 프로토콜을이용한예제 (cont.) 실행결과 TCP Programming 9
소켓소개 : 에코프로그램 프로그램개요 클라이언트에서특정내용을서버에전달 서버는전달받은동일한내용을다시해당클라이언트에게전달 작성할프로그램 에코서버프로그램 EchoServer.java 에코클라이언트프로그램 EchoClient.java TCP Programming 10 소켓소개 : 에코프로그램 - EchoServer import java.io.*; import java.net.*; public class EchoServer{ private ServerSocket server; public EchoServer (int port) throws IOException { server = new ServerSocket (port); public void service() throws IOException { System.out.println("EchoServer is ready."); Socket client = server.accept(); InputStream is =client.getinputstream(); OutputStream os = client.getoutputstream(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); PrintWriter out = new PrintWriter (os, true); while (true) { String msg = in.readline(); System.out.println (msg); if (msg.equals("bye!")) { break; out.println(">>" + msg); public void close() throws IOException { server.close(); public static void main (String args[]){ try{ EchoServer es = new EchoServer (1289); es.service(); es.close(); catch (Exception e) { e.printstacktrace(); TCP Programming 11
소켓소개 : 에코프로그램 - EchoClient import java.io.*; import java.net.*; public class EchoClient{ private Socket socket; public EchoClient(String host, int port) throws Exception{ socket = new Socket (host, port); public void echo() throws IOException { OutputStream os = socket.getoutputstream(); InputStream is = socket.getinputstream(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); PrintWriter out = new PrintWriter(os, true); BufferedReader con = new BufferedReader(new InputStreamReader(System.in)); while (true){ String msg = con.readline(); out.println(msg); if (msg.equals( equals("bye!")) break; System.out.println(in.readLine());; public void close() throws IOException { socket.close(); public static void main(string args[]){ try{ EchoClient ec; System.out.println("Enter a message \n"); if (args.length > 0) ec = new EchoClient (args[0], 1289); else ec = new EchoClient ("localhost", 1289); ec.echo(); echo(); ec.close(); catch (Exception e){ e.printstacktrace(); TCP Programming 12 실행결과 TCP Programming 13
Ref., http://www.shinyoungbok.pe.kr/ TCP Programming 14