如何绑定到任何可用的端口?
我需要一个应用程序将UDP数据包发送到某个networking服务器并接收响应。 服务器回复的请求来自同一端口号,所以我首先需要绑定()我的套接字到任何UDP端口号。
对UDP端口号进行硬编码是一个坏主意,因为它可能被运行在同一台PC上的任何其他应用程序使用。
有没有办法将UDP套接字绑定到任何可用的端口? 国际海事组织它应该是一个有效的方式来快速获得一个自由端口#,这是由例如accept()函数使用。
如果不是,那么尝试绑定并检查WSAEADDRINUSE / EADDRINUSE状态的最佳策略是:从1025或1025 + rand()或其他一些端口开始顺序尝试端口?
调用sendto
如果不先调用bind
,套接字将被自动绑定(自由端口)。
另一种select是将端口0指定为bind()
。 这将允许你绑定到一个特定的IP地址(如果你有多个安装),而仍绑定到一个随机的端口。 如果您需要知道select哪个端口,则可以在绑定执行后使用getsockname()
。
我必须错过一些东西,为什么不使用udp套接字发回数据? 从sendto开始,然后使用recvfrom函数来读取传入的数据,您也可以从数据发送地址获得奖励,在那里您可以发送回应。