sockets - 如何绑定(bind)到任何可用端口?

标签 sockets networking

我需要一个将 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/

相关文章:

java - Apache Thrift Python-Java 'Connection Refused'

actionscript-3 - Air-As3 套接字关闭套接字停止发送信息

python - twisted.protocols.basic.LineReceiver 和 twisted.internet.protocol.Protocol 有什么区别?

c++ - 即使文件描述符不可用,也能有效地监听多个套接字

node.js - 使用Angular的单页应用引擎时依赖socket.io/express.io中的 'disconnect'事件

machine-learning - 将多个 OSC 信号合并为一个

c# - 通过套接字TargetInvocationException进行二进制序列化/反序列化

http - 为什么请求和响应会丢失?

c++ - 服务多个客户端 : accept() socket call in a loop to accept incoming connections

ios - 使用 URLSession 的本地网络 - Swift 4.2、Xcode 10.1