Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 最好有一个长或多个短UDP套接字?_C_Sockets_Udp - Fatal编程技术网

C 最好有一个长或多个短UDP套接字?

C 最好有一个长或多个短UDP套接字?,c,sockets,udp,C,Sockets,Udp,我想通过套接字定期发送UDP消息 是使用一个套接字更好,还是为每条消息重新创建一个套接字并在之后关闭它们更好 由于UDP是无状态的,它会改变什么吗?如果您希望通过套接字接收任何内容,它最好在您希望接收的整个时间内都存在 如果您希望发送多条消息而不接收任何回复,那么您已经犯了一个设计错误,但似乎没有理由为此而一直打开和关闭UDP套接字。当然,只要有必要,保持套接字打开就更有意义了?因为UDP是一种面向数据包的协议,所以没有“连接”可以打开或关闭。如果要向特定地址发送大量消息,可以在UDP套接字上调

我想通过套接字定期发送UDP消息

是使用一个套接字更好,还是为每条消息重新创建一个套接字并在之后关闭它们更好


由于UDP是无状态的,它会改变什么吗?

如果您希望通过套接字接收任何内容,它最好在您希望接收的整个时间内都存在


如果您希望发送多条消息而不接收任何回复,那么您已经犯了一个设计错误,但似乎没有理由为此而一直打开和关闭UDP套接字。当然,只要有必要,保持套接字打开就更有意义了?

因为UDP是一种面向数据包的协议,所以没有“连接”可以打开或关闭。如果要向特定地址发送大量消息,可以在UDP套接字上调用
connect
,然后使用
send
recv
进行通信,而不是
sendto
recvfrom
。通过这种方式,您不必指定在每次函数调用中发送数据的地址,但这并不意味着建立了连接


因此,创建一个套接字并重用它,还是每次创建一个新的更好,更多地取决于您的编程风格:如果您创建了大量套接字并长期存储它们而不使用它们,那么最终可能会耗尽套接字。同样,如果在一个紧密的循环中要求操作系统频繁创建新套接字,可能会成为性能瓶颈。

这不是设计错误,因为它只是一个发送统计数据的路由器。问题是,拥有一个无限长的套接字真的更有意义,还是创建一个短的套接字更好?让我们来扭转这个局面。没有“无限长的插座”真的有意义吗?并为每个传输创建一个新的套接字?可能会失败吗?如果你已经有了套接字,你就不会失败?所以套接字创建过程只是存储要在发送函数中使用的参数?我的术语很混乱:你必须调用
socket
来获取fd,这样你才能与操作系统对话。调用
connect
仅存储参数。