2013-04-05 2 views
0

는 UDP 패킷에 다음과 같은 시나리오를 상상해 :Java가 여러 개의 UDP 패킷을 어떻게 처리합니까?

  1. 서버 방송 "안녕하세요"라는 메시지와 1 개 답변
  2. 클라이언트 2는
"안녕"로 응답 "안녕"과 답변
  • 클라이언트를 기다립니다

    이제 서버가 첫 번째 대답을 처리하기 전에 두 번째 응답을받은 경우 서버에 어떤 일이 발생하는지 관심이 있습니다.

    반면에 UDP는 신뢰할 수 없으며 두 번째로 datagramSocket.receive(myPacket)을 호출하지 않았으므로 두 번째 대답은 자동으로 무시됩니다.

    반면에 소켓은 여전히 ​​열려 있으므로 Java (또는 커널 네트워크 스택과 같은 더 낮은 수준)가 패킷을 대기열에 넣을 수 있습니다.

    이 경우 실제로 어떻게됩니까?

  • 답변

    3

    OS의 네트워크 스택이 데이터 그램을 버퍼링합니다.

    소켓이 열려있는 한 .receive()을 추가로 호출하면 데이터 그램 내용을 가져옵니다.

    패킷이 버퍼링되는 동안 소켓이 닫히면 자동으로 버려집니다.

    +0

    대단히 감사합니다. –

    관련 문제