소켓(socket)이란 프로세스가의 통신에 사용되는 양쪽 끝단(endpoint)를 의미한다. 프로세스간의 통신을 위해서는 그 무언가가 필요한데, 이것이 소켓이다.
항목 | TCP | UDP |
연결방식 | 연결 기반(connection-oriented) - 연결 후 통신(전화기) - 1:1 통신방식 |
비연결 기반(connectionless-oriented) - 연결없이 통신(소포) - 1:1, 1:n, n:n 통신방식 |
특징 | 데이터의 경계를 구분안함(byte-stream) 신뢰성 있는 데이터 전송 - 데이터의 전송순서가 보장됨 - 데이터의 수신여부를 확인함(데이터 손실 시 재전송) - 패킷을 관리할 필요가 없음 UDP보다 전송속도가 느림 |
데이터의 경계를 구분함(datagram) 신뢰성 없는 데이터 전송 - 데이터의 전송순서가 바뀔 수 있음 - 데이터의 수신여부를 확인안함(데이터가 손실되어도 알 수 없음) - 패킷을 관리해주어야 함 TCP보다 전송속도가 빠름 |
관련 클래스 | Socket ServerSocket |
DatagramSocket DatagramPacket MulticastSocket |
TCP 소켓 프로그래밍
클라이언트와 서버간이 일대일 통신이다. 먼저 서버 프로그램이 실행되어 클라이언트 프로그램의 연결요청을 기다리고 있어야 한다.
Socket | 프로세스간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 이 두 스트림을 통해 프로세스간의 통신(입출력)이 이루어진다. |
ServerSocket | 포트와 연결(bind)되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다. 한 호트에 하나의 ServerSocket만 공유할 수 있다.(프로토콜이 다르면 같은 포트를 공유할 수 있다.) |
서버소켓은 포트와 결합되어 포트를 통해 원격 사용자의 연결요청을 기다리다가 연결요청이 올 때마다 새로운 소켓을 생성하여 상대편 소켓과 통신할 수 있도록 연결한다. 여기까지가 서버소켓의 역할이고, 실제적인 데이터 통신은 서버소켓과 관계업싱 소켓과 소켓 간에 이루어진다.
여러 개의 소켓이 하나의 포트를 공유해서 사용할 수 있지만, 서버소켓은 다르다. 서버소켓은 포트를 독점한다. 만일 한 포트를 둘 이상의 서버소켓과 연결이 가능하다면 클라이언트 프로그램이 어떤 서버소켓과 연결되어야하는지 알 수 없을 것이다. 포트는 호스트(컴퓨터)가 외부와 통신을 하기 위한 통로로 하나의 호스트가 65536개의 포트를 가지고 있으며 포트는 번호로 구별된다.
다시 정리하면, 서버소켓은 소켓간의 연결만 처리하고 실제 데이터는 소켓들끼리 서로 주고받는다. 소켓들이 데이터를 주고받는 연결통로는 바로 입출력스트림이다. 소켓은 두 개의 스트림, 입력스트림과 출력스트림을 가지고 있으며, 이 스트림들은 연결된 상대편 소켓의 스트림들과 교차연결된다. 한 소켓의 입력스트림은 상대편 소켓의 출력스트림과 연결되고, 출력스트림은 입력스트림과 연결된다. 그래서 한 소켓에서 출력스트림으로 데이터를 보내면 상대편 소켓에서는 입력스트림으로 받게 된다.
UDP 소켓 프로그래밍
123
'WEB, WAS, APM > 기타' 카테고리의 다른 글
[Java] 입출력/스트림 (0) | 2025.06.19 |
---|---|
[Java] Thread(쓰레드) (1) | 2025.06.19 |
[Java] 동기? 비동기? (0) | 2025.06.04 |