2012-04-01 73 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