我需要一个将 UDP 数据包发送到某个网络服务器并接收响应的应用程序。服务器回复请求的端口号相同,因此我首先需要将我的套接字绑定(bind)到任何 UDP 端口号。
对 UDP 端口号进行硬编码不是一个好主意,因为它可能会被同一台 PC 上运行的任何其他应用程序使用。
有没有办法将 UDP 套接字绑定(bind)到任何可用端口? IMO 它应该是快速获得自由端口 # 的有效方法,例如可以使用该端口。接受()函数。
如果不是,那么尝试绑定(bind)并检查 WSAEADDRINUSE/EADDRINUSE 状态的最佳策略是什么:从 1025、或 1025+rand() 或其他端口开始按顺序尝试端口?
最佳答案
另一个选项是将端口 0 指定给 bind()
。这将允许您绑定(bind)到特定的 IP 地址(如果您安装了多个),同时仍然绑定(bind)到随机端口。如果您需要知道选择了哪个端口,可以在执行绑定(bind)后使用 getsockname()
。
关于sockets - 如何绑定(bind)到任何可用端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075399/