套接字端口不匹配侦听端口

时间:2016-01-22 11:56:39

标签: sockets port haxe

我正在使用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?

1 个答案:

答案 0 :(得分:2)

服务器和客户端套接字都需要绑定到某个本地地址(ip,port)才能实现连接。

客户端只是绑定到本地免费端口,很可能会发生很大变化,具体取决于您计算机上发生的所有其他连接。

最后,Haxe套接字(有时间接地)是POSIX套接字上的包装器; connect()的{​​{3}}说:

  

如果套接字尚未绑定到本地地址,connect()应将其绑定到一个地址,...,是一个未使用的本地地址。