创建随机可用端口

时间:2012-02-13 20:54:26

标签: c networking network-programming

我正在用C编写一个程序,其中服务器侦听一个众所周知的端口,等待客户端连接,然后创建一个随机端口供客户端使用并将此端口号发送回客户端。我的主要困难是如何创建一个“随机”端口。我应该只使用srand并创建一个随机的4位数端口是可用范围吗?或者有更好的方法吗?我知道如果我使用端口0将为我选择一个端口,但问题是我不认为我可以“获取/看到”端口的实际值,以便我可以发送此端口号给客户。

...谢谢

4 个答案:

答案 0 :(得分:2)

绑定端口0是解决方案。它为您提供了一个任意端口,而不是随机端口,但这是许多应用程序所做的事情(例如FTP等)。

绑定后,您可以使用getsockname找出您所拥有的端口。

答案 1 :(得分:2)

您执行的操作是bind(),端口设置为0.系统将分配一个。然后使用getsockname()来发现系统分配的端口。将其发送回客户端。这样就没有竞争条件,你遵循任何系统规则进行端口分配。

答案 2 :(得分:0)

检查一个随机的4位数端口,以确保它没有被使用就可以了。

从技术上讲,听起来你正试图实现这一点以增加安全性(某种原始端口敲门程序)?值得一提的是,这种方法通常不被认为太安全。它还对一次可以服务的客户端数量施加了一些人为限制,实际上会在服务器上增加不必要的负载。为什么不直接听取所有客户的单一知名端口?

答案 3 :(得分:0)

考虑到你对操作系统的监听和自动端口分配的描述,我猜TCP。在这种情况下,您不必担心它。一旦你接受了TCP连接,双方的操作系统就会处理你正在尝试的所有操作,并且你可以使用工作连接。除非你有特别的理由自己做这些,否则它已经为你完成了。