我在 Linux 虚拟机上有一个用 C 语言编写的 UDP 服务器,在 Windows 7 主机上有一个用 C# 语言编写的 UDP 客户端。
UDP 服务器监听连接。 UDP 客户端连接然后发送请求。服务器接收请求,处理它,然后发回回复(小于 100 字节)。 UDP 客户端收到回复并执行一些工作。这个过程以每秒大约 10 个请求/回复对的速度不断重复。
目前,我有 UDP 服务器在端口 11000 上监听和接收并在端口 10001 上发送,客户端在端口 10001 上监听和接收并在端口 11000 上发送。用于监听的套接字在两者上都保持打开状态双方。通过发送,每一方都打开发送套接字,发送数据,然后关闭,直到收到下一个请求。到目前为止,这是有效的。
我知道应该可以使用相同的套接字来发送和接收。我还没能让它发挥作用,但这不是我的问题。我的问题是,在我的情况下,如果它按目前的情况工作,使用相同的套接字是否有明显的优势?有什么缺点吗?或者像我当前的实现那样拥有两个独立的套接字有什么好处?
谢谢。
最佳答案
当然,你所做的事情会受到惩罚,即资源浪费。
每次创建套接字、发送数据并销毁它时,您都会分配/释放不必要的资源。
假设您的消息速率很高,每次发送消息时,您都会创建/销毁一个套接字,并且套接字不会立即销毁(至少在 TCP 中,也许在 UDP 中我错了)。
如果您只能使用一个 socket ,那就这样做,当您用手机与某人交谈时,您不会每次在谈话中想说些什么时就购买一个新 socket 并将其扔进垃圾桶,这是真的? ;)
关于c# - 使用相同的套接字进行 UDP 发送和接收有优点还是缺点?使用 C 和 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23944714/