2013-03-18 2 views
4
내가 소켓 프로그램을 작성하고 싶습니다

...자바 소켓 메시지가 순서

Socket socket = new Socket("127.0.0.1",12345); 
DataOutputStream output = new DataOutputStream(socket.getOutputStream()); 
output.writeUTF("Hello"); 
output.writeUTF("World"); 
... 
... 

"안녕하세요", "세계"... 문자열이 처음 도착 얻을 도착? 소켓이 주문을 보장 했습니까?

+6

TCP 소켓 인 경우, 보장됩니다. 그러나 데이터 그램 (UDP) 소켓에 대해서는 그렇지 않습니다. – deepmax

+1

@MM. 응답으로 추가해야합니다. – Joshua

답변

6

TCP 프로토콜은 모든 메시지가 완전하고 순서대로 전송되도록 보장합니다. 따라서 "세계"가 항상 "안녕하세요"다음에 도착한다는 전제에 의존 할 수 있습니다. 어떤 이유로 "Hello"패킷이 손실되면 "Hello"패킷이 다시 요청되는 동안 다른 응용 프로그램에 "World"패킷 배달이 지연됩니다.

이것은 관련된 호스트의 운영 체제의 네트워크 스택에 의해 자동으로 처리되므로 응용 프로그램 프로그래머 용으로는 아무 것도 할 필요가 없습니다.

TCP 프로토콜 작동 방식에 대한 자세한 내용은 the wikipedia article about it을 추천 할 수 있습니다.

UDP 소켓을 사용하는 경우 상황은 다릅니다. UDP는 순서 나 신뢰성을 보장하지 않기 때문에 하나의 패킷이 다른 하나를 추월 할 가능성이 있습니다 (사용자가 "Hello"앞에 "World"를 수신 할 수도 있음) 또는 패킷이 손실 될 수도 있습니다 (사용자는 "Hello"또는 오직 "세계").

표준 Socket 클래스는 기본적으로 TCP를 사용합니다. 이것은 0x37을 사용하여 생성자에서 UDP를 사용하여 오버라이드 할 수 있습니다. (더 이상 사용되지 않는) 세 번째 매개 변수로 true을 전달하거나 사용자 정의 소켓 구현을 UDP를 사용하는 정적 메소드 Socket.setSocketImplFactory에 전달한 경우 (이것은 미친 것입니다. UDP 또는 TCP가 아닌 외래 전송 계층 프로토콜을 구현하는 것입니다.

일반적으로 UDP 소켓은 DatagramSocket 클래스로 표시됩니다.