2016-01-22 81 views
2

我使用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); 

现在我得到的结果是这样的:

从127.0.0.1端口

传入连接50977

从127.0.0.1端口

传入连接50978

来自端口50979上的127.0.0.1的传入连接

这是怎么回事?为什么显示的端口不是20301?

回答

2

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

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

最后,Haxe套接字(有时是间接的)是POSIX套接字的封装;该specconnect()说:

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

+0

啊,我明白了。我只是假设两端都使用同一个端口,但我可以看到这种方法更有意义。 – TheSHEEEP