我需要创建一个程序,通过UDP套接字与同一台计算机上的其他程序进行通信。它将从stdin读取命令,其中一些命令将使其在不停止执行的情况下发送/接收数据包。我已经阅读了一些信息,但由于我不熟悉套接字编程并需要快速完成,我有以下问题:
此外,欢迎使用此类套接字设置的代码示例,以及发送/接收字符串的示例。
答案 0 :(得分:20)
调用bind()
指定端口0.这将允许操作系统选择未使用的端口。然后,您可以使用getsockname()
来检索所选端口。
答案 1 :(得分:1)
如果您需要临时端口,Remy Lebeau的回答很好。如果您需要持久保留端口则不太好,因为其他软件也使用相同的方法来获取端口(包括需要为每个连接建立新临时端口的OS TCP堆栈)。
所以可能会发生以下情况:
然后你需要例如重启软件:
因此,对于“将来使用”,您需要一个不在临时端口范围内的端口(这是bind(host,0)返回端口的范围)。
我对此问题的解决方案是port-for命令行实用程序。
答案 2 :(得分:0)
如果它是一个随机端口实际上很重要,你应该做类似的事情:
srand(time(NULL));
rand() % NUM_PORTS; // NUM_PORTS isn't a system #define
然后在bind中指定该端口。如果失败,请选择一个新的(不需要重新播种随机生成器。如果随机端口不重要,请查看Remy Lebeau的答案。