套接字端口与监听端口不匹配
Socket ports are not matching listening ports
我正在使用 sys.net.Socket (cpp, linux) 设置一个简单的服务器。
服务器是这样绑定的:
hostSocket.bind(new Host("0.0.0.0"), 20301);
然后我这样连接到服务器:
clientSocket.connect(new Host("localhost"), 20301);
如果端口不匹配,连接将无法正常工作,因此会按预期工作。
但是,当我在服务器端“接受”连接并想要打印有关客户端的信息时,只要有新连接传入,我就会得到一个随机端口,永远不会 20301:
var connectedClient : Socket = hostSocket.accept();
trace("Incoming connection from " + connectedClient.peer().host.toString()
+ " on port " + connectedClient.peer().port);
现在我得到这样的结果:
Incoming connection from 127.0.0.1 on port 50977
Incoming connection from 127.0.0.1 on port 50978
Incoming connection from 127.0.0.1 on port 50979
这是怎么回事?为什么显示的端口不是20301?
服务器和客户端套接字都需要绑定到某个本地地址(ip、端口)才能建立连接。
客户端简单地绑定到本地免费端口,并且很可能会发生很大变化,具体取决于您计算机上发生的所有其他连接。
最后,Haxe 套接字(有时是间接的)是 POSIX 套接字的包装器; connect()
的 spec 说:
If the socket has not already been bound to a local address, connect()
shall bind it to an address which, ..., is an unused local address.
我正在使用 sys.net.Socket (cpp, linux) 设置一个简单的服务器。
服务器是这样绑定的:
hostSocket.bind(new Host("0.0.0.0"), 20301);
然后我这样连接到服务器:
clientSocket.connect(new Host("localhost"), 20301);
如果端口不匹配,连接将无法正常工作,因此会按预期工作。
但是,当我在服务器端“接受”连接并想要打印有关客户端的信息时,只要有新连接传入,我就会得到一个随机端口,永远不会 20301:
var connectedClient : Socket = hostSocket.accept();
trace("Incoming connection from " + connectedClient.peer().host.toString()
+ " on port " + connectedClient.peer().port);
现在我得到这样的结果:
Incoming connection from 127.0.0.1 on port 50977
Incoming connection from 127.0.0.1 on port 50978
Incoming connection from 127.0.0.1 on port 50979
这是怎么回事?为什么显示的端口不是20301?
服务器和客户端套接字都需要绑定到某个本地地址(ip、端口)才能建立连接。
客户端简单地绑定到本地免费端口,并且很可能会发生很大变化,具体取决于您计算机上发生的所有其他连接。
最后,Haxe 套接字(有时是间接的)是 POSIX 套接字的包装器; connect()
的 spec 说:
If the socket has not already been bound to a local address,
connect()
shall bind it to an address which, ..., is an unused local address.