关于so??ckets:Python即时通讯程序连接失败errno 111

Python instant messaging program fails to connect with errno 111

我正在尝试使用 socket 模块在 Python 中实现一个简单的 TCP 即时消息程序。当我在 connect() 中使用 socket.gethostname() 返回的值时,客户端在连接到在 localhost 上运行的 IM 服务器时工作得非常好。但是,当我使用 socket.gethostbyname("localhost") 返回的值时,客户端返回 errno 111(连接被拒绝)。有什么办法可以解决这个问题吗?


如果您在尝试 connect 时得到 111,这通常意味着没有在该主机和端口上监听。

使用 netcat (您可能在除 Windows 之外的任何平台上都内置,如果不这样做也可以轻松获得)或 如果必须:

1
2
3
4
abarnert$ nc -v localhost 111
nc: connect to localhost port 111 (tcp) failed: Connection refused
nc: connect to localhost port 111 (tcp) failed: Connection refused
nc: connect to localhost port 111 (tcp) failed: Connection refused

由于netcat无法连接,问题不是你的Python客户端,而是没有什么可以连接的。

这意味着你的服务器没有监听 localhost:111。

除了简要提及之外,如果不了解您的服务器,就无法诊断,但我的第一个猜测是您正在执行 bind((gethostname(), 111)),这意味着它最终只会监听,例如, 10.0.0.3:111.

如果你想监听所有主机和接口,有很多方法可以指定,但最简单的方法是:

1
serversocket.bind(('', 111))