我写一个程序,它会首先验证到服务器,然后通过UDP发送和接收消息。 而发送和接收消息,我还需要保持与服务器的连接,所以我需要周期性地发送保持活动到服务器并从服务器接收响应。
我的理解是可以发送,并在同一时间在同一插座上接收数据包,但我担心,我需要一段时间来建立一个数据包发送的情况下,在此期间,服务器发送了我两个消息。
- 当我打电话接收(),做第二个消息覆盖的第一条消息?
- 它是建立两个UDP套接字什么,我试图完成的最佳实践? 一个插座用于发送和用于接收一个插座。
谢谢你,莱克斯
我写一个程序,它会首先验证到服务器,然后通过UDP发送和接收消息。 而发送和接收消息,我还需要保持与服务器的连接,所以我需要周期性地发送保持活动到服务器并从服务器接收响应。
我的理解是可以发送,并在同一时间在同一插座上接收数据包,但我担心,我需要一段时间来建立一个数据包发送的情况下,在此期间,服务器发送了我两个消息。
谢谢你,莱克斯
不幸的是服务器,你说你无法控制的,需要UDP 和具有认证方案。 这是一个严重的安全问题,因为它是相对容易的攻击者假装是相同的UDP终点为您的客户端已被验证。
至于你的具体问题去:
问题是,它不是一个完美的世界,尤其是当你正在处理UDP。 UDP有三个显著的局限性:
因此,它不仅是可能的,如果服务器发送第二数据报,第一个可能会丢失,如果你还没有收到它,第一个可能会丢失在任何情况下 。 你有没有保证任何数据报将被交付给你。
现在,也有你与数据报做什么,一旦你已经收到了这个问题。 不幸的是,它不是从你的问题清楚这是否是你问什么的一部分。 但自然,一旦调用ReceiveFrom()
完成(或Receive()
如果你已经使用Connect()
在UDP Socket
),你手头的数据报,这完全取决于你的代码是如何处理和是否previously-接收到的数据将被覆盖或没有。
Socket
实例,一个以处理接收和一个来处理发送。 它不仅是不必要的,你就必须要么有某种机制使服务器明白,两个不同的远程端点实际上代表相同的客户端(因为它们通常有不同的端口号,就算你保证,他们是在同一个IP地址),或者你将不得不滥用Socket
使用“复用地址”选项(这是一种方法,允许通过两个不同的使用相同的端口Sockets
,但是这会导致各种其他问题)。 这是完全没有使用相同Socket
实例接收和发送,而事实上这就是你如何预期使用它。 最好的做法是这样做的。