【发布时间】:2014-11-08 11:33:42
【问题描述】:
我正在运行一个服务器(比如在端口 50000 上)。任何新请求都会被接受,并且每次操作系统都会分配一个随机端口。我想手动分配端口号,而不是系统为我随机分配。
这样做的主要原因是我试图根据端口号做一些多播的事情。我打算在同一个端口上分配几个客户端。另一个端口上的下一个客户端插槽,依此类推。
有什么想法吗?
【问题讨论】:
-
客户端打开连接时会得到一个随机的(源)端口,但服务器上的端口保持不变。如果你想让客户端连接到不同的端口,你需要监听多个端口。
-
如果您连接到
server:50000,那么您将始终连接到端口50000(所以这是固定的)。 otoh,clients 将有“随机”端口;如果您希望手动设置这些端口,则需要在客户端修复它们 -
使用 bind() 将端口分配给套接字。
-
@vjcalling:当您在服务器端
accept()连接时,该连接被分配建立它的客户端 IP/端口和接受它的服务器端 IP/端口。没有什么是随机的。你把你的信息弄混了。 -
@vjcalling: 不,服务器不会将 random 端口分配给已接受的连接。它不能分配随机端口。阅读我的答案。服务器分配连接的客户端和服务器端正在使用的任何实际端口。只有客户端可以在连接到服务器之前为自己选择一个随机端口。客户端使用随机出站端口是正常和典型的行为。要改变这一点,您必须在调用
connect()之前在客户端使用bind()。
标签: c++ linux sockets network-programming system-calls