gpt4 book ai didi

sockets - 套接字端口与监听端口不匹配

转载 作者:行者123 更新时间:2023-12-03 11:53:09 25 4
gpt4 key购买 nike

我正在使用 sys.net.Socket (cpp, linux) 设置一个简单的服务器。
服务器绑定(bind)如下:

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?

最佳答案

服务器和客户端套接字都需要绑定(bind)到某个本地地址(ip、端口)才能发生连接。

客户端只是绑定(bind)到本地空闲端口,并且很可能会发生很大变化,具体取决于您机器上发生的所有其他连接。

最后,Haxe 套接字(有时是间接的)是 POSIX 套接字的包装器; spec对于 connect()说:

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.

关于sockets - 套接字端口与监听端口不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34946169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com