![在套接字编程中从缓冲区接收数据](https://linux22.com/image/1499799/%E5%9C%A8%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BC%96%E7%A8%8B%E4%B8%AD%E4%BB%8E%E7%BC%93%E5%86%B2%E5%8C%BA%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE.png)
请看这张图片。recvfrom() 会阻塞,直到从客户端接收到数据报。由于没有连接,每个数据报可能来自不同的发送者。
我可以从接收器接收数据,但我不知道服务器如何找到哪个数据属于哪个客户端?因为有可能 8.8.8.8 客户端发送 3 个数据报,服务器必须对数据进行排序。服务器是否为每个客户端分配特定的缓冲区?
答案1
最好的选择是设计协议,使消息包含某种源标识符。如果做不到这一点,您可以使用源 IP 地址和端口来确定客户端,但如果客户端的 IP 地址发生变化,这种方法就会失效。
请看这张图片。recvfrom() 会阻塞,直到从客户端接收到数据报。由于没有连接,每个数据报可能来自不同的发送者。
我可以从接收器接收数据,但我不知道服务器如何找到哪个数据属于哪个客户端?因为有可能 8.8.8.8 客户端发送 3 个数据报,服务器必须对数据进行排序。服务器是否为每个客户端分配特定的缓冲区?
最好的选择是设计协议,使消息包含某种源标识符。如果做不到这一点,您可以使用源 IP 地址和端口来确定客户端,但如果客户端的 IP 地址发生变化,这种方法就会失效。