2012-02-13 27 views
2

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

谢谢...

+0

“互联网号码分配机构(IANA)建议动态或私人端口的范围为49152至65535。” http://en.wikipedia.org/wiki/Ephemeral_port – tMC 2012-02-13 21:05:46

回答

3

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

绑定后,您可以使用getsockname找出您得到的端口。

0

随机的4位端口检查,以确保它不是在使用中用于该目的OK ..

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

0

我猜测TCP考虑你的操作系统的监听和自动端口分配的描述。在这种情况下,你不需要担心它。一旦你接受了TCP连接,双方的操作系统都会照顾你想要做的所有事情,并且你还剩下一个工作连接,随时可以使用。除非你自己有特殊的理由去做这件事,它已经为你做了。

3

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