2012-04-01 69 views
0

我是學習者,請耐心等待。我正在用Java套接字(DatagramSocket)編寫一個echo客戶端。UDP套接字和多個回覆

客戶端向echo服務器發送消息後,服務器故意發回1-10個消息副本以模擬UDP中的消息重複。

但是,我的代碼只能接收第一個發回的消息,而不是服務器發送的完整號碼。我收到的代碼是這樣的:

socket.receive(receivePacket); 

如何將我把我的客戶端的狀態下,你可以輸入一個字符串呼應,說「你好」,它隨後被髮送到服務器,但隨後可接收全部回覆?我假設他們都回到客戶端(我正在我的本地機器上測試這個,所以不會有損失)

回答

3

再次調用socket.receive來接收額外的數據包。 Set a timeout在決定服務器已發送所有數據包之前等待一段合理的時間。

+0

嗨...所以我首先將套接字超時設置爲1000ms,然後通過該套接字發送消息,然後說輸入一個while(true)循環調用socket.receive(...),直到SocketTimeoutException爲拋出......這將是允許回覆到達客戶端的「最大時間窗口」。這聽起來是否理智? – xingyu 2012-04-01 07:27:31

+0

是的。發送初始消息後,您可以考慮設置超時時間。我建議等待第一個響應3-5秒(尤其是如果你是通過互聯網進行的話),然後將超時改回到1秒以消耗重複。 – selbie 2012-04-01 19:35:50