2011-03-29 4 views
0

통신용 Java 소켓 API를 사용하고 있습니다. 하지만 언젠가는 하나의 패킷에 패킷이 첨부됩니다. 같은 것을 어떻게 피할 수 있습니까? Java NIO 또는 Java NIO 2에서 동일한 문제를 해결할 수있는 방법이 있습니까? 패킷이 별도로 제공 될 것이라고 확신합니다. 그러나 둘 다 단일 버퍼에 저장됩니다.자바 소켓 문제는 버퍼가 동시에 두 패킷을받습니다.

여기서 패킷은 논리적 인 데이터 분리입니다. 데이터는 타사 시스템에서 전송됩니다. 그들은 하나씩 보낸다. 하지만 동시에 두 패킷을 받고 있습니다.

답변

4

이것이 작동하는 방식입니다. TCP는 패킷을 사용하여 데이터를 전송하지만 고급 소켓 API에서는 보이지 않습니다. 출력 스트림을 열고 원하는만큼의 데이터를 전송합니다. 이 데이터는 TCP/IP 프로토콜 스택에 의해 패킷으로 분할됩니다. 수신 측에서는 입력 스트림을 열고 패킷으로 분할 된 것을 알지 못해도 데이터를 수신합니다.

두 개의 응용 프로그램 수준 패킷이 필요한 경우 패킷 사이의 구분 기호 또는 고정 크기의 데이터 덩어리를 사용하여 전송 프로토콜을 설계하거나 논리 패킷의 일부와 무엇이 일부인지 구분할 수있는 모든 것을 지정하십시오 다음.

+0

+1 : 요약하면 바이트 스트림 만 있습니다. 패킷 또는 메시지의 개념은 사용자가 추가해야 할 환상입니다. –

+0

패킷이란 메시지를 의미합니다. 그것은 제 3 자 시스템에 의해 전송됩니다. – Kamahire

+0

@Kamahire : 제 3 자 시스템에서 전송하는 경우 형식이 있어야하며이를 구문 분석해야합니다. – axtavt