2016-01-22 115 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