ServerSocket 소스
package com.blog.naver.kmdigit.server; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; import java.io.DataInputStream; import java.io.DataOutputStream; public class TestServer { private static final int SERVER_PORT = 12345; public static void main(String[] args) { ServerSocket server = null; Socket socket = null; try { server = new ServerSocket(SERVER_PORT); DataInputStream in = null; DataOutputStream out = null; System.out.printf(">> server open port(%d)\n", SERVER_PORT); while ((socket = server.accept()) != null) { System.out.printf(">> accept socket host(%s)\n", socket.getInetAddress()); int recv_message = in.readInt(); int send_message = recv_message * 10; out.writeInt(send_message); socket.close(); } } catch (IOException e) { e.printStackTrace(); } finally { if (server != null) try { server.close(); } catch (IOException e) {} } } };
소스 분석
JAVA에서 서버 프로그래밍을 하기 위해선 미리 만들어진 net 패키지의 ServerSocket과 Socket을 사용하면 된다.
ServerSocket의 생성자는 다양하지만 일반적으로 Listen 하는 PORT만 입력하여 사용한다.
후엔 accept 함수로 Listen 상태가 되어 클라이언트가 접속할 수 있는 준비를 한다.
accept 함수의 리턴 값은 접속한 클라이언트와 따로 통신할 수 있는 Socket 객체이다.
이제부터는 ServerSocket이 아닌 Socket 객체로 접속한 클라이언트와 통신하게 된다.
String을 주고받을 땐 Reader를 활용하면 되지만 일반적으로 String보단 Binary 통신을 훨씬 많이 하기 때문에
예제로 DataInputStream과 DataOutputStream을 사용하였다.
DataInputStream은 readXXX 함수를 통해 필요한 크기만큼의 값을 수신할 수 있으며
DataOutputStream은 writeXXX 함수를 통해 필요한 크기만큼의 값을 송신할 수 있다.
이때 DataInputStream이나 DataOutputStream을 close 시키면 안 되는데
이유는 Socket의 송/수신 채널이 막히기 때문이다.
더 이상 사용을 하지 않을 땐 DataInputStream과 DataOutputStream 대신 Socket 객체를 close 시키면 마무리된다.
'Nam Site > Java' 카테고리의 다른 글
[JAVA] 소켓 프로그래밍 (클라이언트) (0) | 2016.12.02 |
---|---|
[JAVA] 자바에 없는 unsigned int 처리 (0) | 2016.11.29 |
[Java] String to int, int to String 형변환 (0) | 2016.11.28 |