2012-04-01 5 views
0

나는 학습자이므로 잠시 기다려주십시오. Java 소켓 (DatagramSocket)을 사용하여 에코 클라이언트를 작성했습니다.UDP 소켓 및 복수 응답

클라이언트가 에코 서버에 메시지를 보내면 서버는 의도적으로 1-10 개의 메시지 복사본을 다시 보내 UDP의 메시지 복제를 시뮬레이트합니다.

그러나 내 코드는 보낸 첫 번째 메시지 만 수신 할 수 있으며 서버가 보낸 전체 번호는 수신 할 수 없습니다. 당신이 말하는 "안녕", 그것은 다음 서버로 전송됩니다 반향 문자열을 입력 할 수있는 난 상태에서 내 클라이언트를 둘 것입니다 방법

socket.receive(receivePacket); 

수 있지만,이 모든납니다 코드를받을 내 것은 다음과 같은 것입니다 대답? 나는 그들 모두가 클라이언트에게 다시 돌아갈 것으로 가정하고있다. (나는 로컬 컴퓨터에서 이것을 테스트하여 손실이 없을 것이다.)

답변

3

추가 패킷을 받으려면 다시 socket.receive를 호출한다. Set a timeout은 서버가 모든 패킷을 보낸 것으로 판단하기 전에 적절한 시간 동안 대기해야합니다.

+0

안녕하세요. 우선 소켓 타임 아웃을 1000ms로 설정 한 다음 해당 소켓을 통해 메시지를 보낸 다음 SocketTimeoutException이 발생할 때까지 socket.receive (...)를 호출하는 while (true) 루프를 입력하십시오. throw됩니다 ... 이것은 응답을 클라이언트에 도달 할 수있는 "최대 시간 창"이됩니다. 그 소리는 제정신이 아닌가요? – xingyu

+0

예. 초기 메시지를 보낸 후 제한 시간을 설정하는 것을 고려할 수 있습니다. 첫 번째 응답 (특히 인터넷을 통해이 작업을 수행하는 경우)을 위해 3-5 초 정도 대기 한 다음 시간 제한을 1 초로 변경하여 중복 된 데이터를 소비하는 것이 좋습니다. – selbie