Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 创建随机可用端口_C_Networking_Network Programming - Fatal编程技术网

C 创建随机可用端口

C 创建随机可用端口,c,networking,network-programming,C,Networking,Network Programming,我正在用C编写一个程序,其中服务器监听一个已知的端口,等待客户端连接,然后创建一个随机端口供客户端使用,并将此端口号发送回客户端。我的主要困难是如何创建“随机”端口。我是否应该使用srand并创建一个随机的4位端口才是可用范围?还是有更好的方法?我知道如果我使用端口0,将为我选择一个端口,但这里的问题是,我认为我无法“获取/查看”端口的实际值,以便将此端口号发送回客户端 谢谢…检查一个随机的4位端口,以确保它没有被使用,这样做是可以的 从技术上讲,这听起来像是为了增加安全性(某种原始的端口敲击例

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


谢谢…

检查一个随机的4位端口,以确保它没有被使用,这样做是可以的


从技术上讲,这听起来像是为了增加安全性(某种原始的端口敲击例程)而实现的?值得一提的是,这种方法通常不太安全。它还对一次可以服务的客户机数量施加了一些人为的限制,实际上在服务器上增加了不必要的负载。为什么不只监听所有客户端的一个已知端口?

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


从技术上讲,这听起来像是为了增加安全性(某种原始的端口敲击例程)而实现的?值得一提的是,这种方法通常不太安全。它还对一次可以服务的客户机数量施加了一些人为的限制,实际上在服务器上增加了不必要的负载。为什么不在所有客户端的一个已知端口上侦听呢?

我猜TCP考虑到了您对侦听和操作系统自动分配端口的描述。在这种情况下,你不需要担心。一旦你接受了TCP连接,两边的操作系统就会处理好你要做的所有事情,剩下的就是一个可以工作的连接,随时可以使用。除非你有特殊的理由自己做这些事情,否则它已经为你做了。

我猜TCP考虑到了你对监听和操作系统自动端口分配的描述。在这种情况下,你不需要担心。一旦你接受了TCP连接,两边的操作系统就会处理好你要做的所有事情,剩下的就是一个可以工作的连接,随时可以使用。除非您有特殊的理由自己执行这些操作,否则它已经为您完成了。

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


绑定后,您可以使用
getsockname
确定您使用的端口。

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


绑定后,您可以使用
getsockname
确定您获得的端口。

您要做的是
bind()
将端口设置为0。系统将分配一个。然后使用
getsockname()
查找系统分配的端口。将其发送回客户机。这样就不存在争用条件,您可以按照任何系统规则进行端口分配。

您要做的是
bind()
将端口设置为0。系统将分配一个。然后使用
getsockname()
查找系统分配的端口。将其发送回客户机。这样就不存在竞争条件,您可以遵循任何端口分配的系统规则。

“Internet分配号码管理局(IANA)建议动态或专用端口的范围为49152到65535。”“Internet分配号码管理局(IANA)建议动态或专用端口的范围为49152到65535。”