【发布时间】:2012-08-05 05:49:27
【问题描述】:
是否有一种简单(非迭代)的方法来绑定两个套接字,一个 TCP 和一个 UDP,以保证两者具有相同的临时端口?
我有一个简单的服务器,最初通过 TCP 连接,但也通过 UDP 传输。我不想从客户端发送 UDP 数据包后连接只是为了让服务器发现客户端的 UDP 临时端口。除非必须,否则我不想通过初始 TCP 连接消息发送端口号。
现在,我在 TCP 套接字上的 getsockname 之后显式绑定客户端 UDP 套接字的端口,以发现操作系统分配的临时端口。它还没有失败,但感觉很脆弱。
编辑: 澄清一下,当前的实现假定操作系统永远不会为已被 UDP 套接字使用的 TCP 套接字分配临时端口。
【问题讨论】:
-
你需要那个端口做什么?你想做什么?
-
没关系。有很多方法可以在不发送数据的情况下通知服务器第二个临时端口,但如果我能提供帮助,我不想这样做。
-
这对我来说很重要,因为我很好奇你想做什么。为什么两个临时端口(即客户端操作系统分配为连接或数据流的源端口的端口)必须相同?这样做有什么好处,操作系统分配的随机端口有什么问题?
-
通知服务器第二个临时端口只会增加复杂性。如果您通过第一个 TCP 连接发送第二个端口号,则客户端和服务器上的代码都会更多。如果您通过 UDP 发送连接数据报,则它是不可靠的并且会添加更多代码。
标签: sockets