TCP 네트워킹 예시
// 서버 측
ServerSocket serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("도메인 or IP주소", 포트번호));
try {
Socket socket = serverSocket.accept(); // 연결 수락
} catch (Exception e) { ... }
// 연결된 클라이언트의 IP, 포트 정보 얻기
InetSocketAddress socketAddress = (InetSocketAddress) socket.getRemoteSocketAddress();
serverSocket.close(); // 더 이상 연결 수락이 필요없는 경우 포트 언바인딩
// 클라이언트 측
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress("도메인 or IP주소", 포트번호)); // 연결 요청
socket.close(); // 연결 해제
} catch (UnknownHostException e) {
// 잘못 표기된 ip주소를 입력한 경우
} catch (IOException e) {
// 해당 포트의 서버에 연결할 수 없는 경우
}
// 양쪽의 Socket 객체로부터 데이터 통신을 위해 입출력 스트림을 얻기
Inputstream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
ServerSocket의 accept(), Socket의 connect(), 데이터 송수신 read(), write() 등은 동기(블로킹) 방식으로 구동되므로, 서버에 별도의 작업 스레드를 생성하여 다중 클라이언트와 병렬적으로 통신하게 하거나(클라이언트 폭증으로 인한 서버 과부하 우려 있음), 스레드풀을 사용(최대 스레드 수를 제한할 수 있지만 개별 클라이언트의 응답이 느릴 수 있음)하는 등 하는 것이 좋다.
UDP 네트워킹: 비연결 지향적 프로토콜, 연결 절차를 거치지 않고 일방적으로 데이터를 발신. TCP보다 빠르지만 순서를 보장하지 않으며 데이터 전달의 신뢰성은 떨어짐.
DatagramSocket(발신점과 수신점에 해당. send(), receive(), close()...)과 DatagramPacket(주고받는 패킷에 해당)을 사용하여 통신함.
참고자료
이것이 자바다