c# - 使用相同的套接字进行 UDP 发送和接收有优点还是缺点?使用 C 和 C#

标签 c# c sockets udp datagram

我在 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/

相关文章:

c - 在 VS Code 中使用 C++ 和 WSL 用于远程 ARM64 设备

使用 strcpy 将输入的字符串复制到字符串数组的 "ith"元素中

c# - 组合而不是继承

c# - NUnit3 测试不在 TFS 构建上运行

c# - 如何读取BenchmarkDotNet的结果表

c - 为什么我没有从该函数中获得任何值(value)?

c# - DateTime.Now 检索速度

php - php的socket_select()是否保证检测到所有客户端套接字断开连接?

java - 使用 HTTP 协议(protocol)通过 TCP 套接字获取图像

c - 在c中使用UDP和TCP套接字编程建立连接