我正在使用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);
现在我得到这样的结果:
端口50977上127.0.0.1的传入连接
端口50978上127.0.0.1的传入连接
端口50979上127.0.0.1的传入连接
这里发生了什么?为什么显示的端口不是20301?
答案 0 :(得分:2)
服务器和客户端套接字都需要绑定到某个本地地址(ip,port)才能实现连接。
客户端只是绑定到本地免费端口,很可能会发生很大变化,具体取决于您计算机上发生的所有其他连接。
最后,Haxe套接字(有时间接地)是POSIX套接字上的包装器; connect()
的{{3}}说:
如果套接字尚未绑定到本地地址,
connect()
应将其绑定到一个地址,...,是一个未使用的本地地址。