2016-09-15 3 views
0

저는 DatagramSocket을 가지고 있고 socket.receive()에 소켓으로 보낸 패킷을 저장하는 버퍼가 있음을 알고 있습니다. 나는 UDP를 사용하여 신뢰할 수있는 프로토콜을 구현하려고하는데, 내 윈도우가 가득차면 한 번에 버퍼를 모두 언로드 할 수 있다면 이상적입니다. 간단한 루프를 만들었다면 버퍼가 비어있을 때 socket.receive()가 내 프로그램을 차단할 것이다.Java에서 DatagramSocket의 버퍼에 액세스 할 수 있습니까?

해당 버퍼에 액세스 할 수있는 방법이 있습니까?

답변

0

아니요,하지만 비 차단 모드에서는 DatagramChannel입니다.

-1

DatagramSocket에는 버퍼가 없습니다. 운영 체제의 네트워크 스택에 버퍼가 있지만 액세스 할 수 없습니다.

는 내가 그렇게하지 조언을 것 UDP

사용하여 신뢰할 수있는 프로토콜을 구현하기 위해 노력하고 있습니다 - 당신은 TCP를 발명하게 될 겁니다,하지만 자신의 버그.

+0

'DatagramSocket'에는 실제로 버퍼가 있고 아무 질문도 대답하지 않았습니다. – EJP

+0

대답은 아니오입니다. 그 이유는 버퍼가 없기 때문입니다. – Joni

0

는 한 번에 모든 패킷을 언로드하는 실제 방법이 없습니다 ...

특정 네트워크 할당으로 인해 오늘 밤처럼 소리. 작은 기간 (보낸 사람의 총 시간 제한 값보다 작음) 후에 소켓을 시간 초과로 설정하고 창에서 패킷을 보내고 승인을 수신하는 동안 반복하도록하는 것이 좋습니다.

관련 문제