Python instant messaging program fails to connect with errno 111
我正在尝试使用 socket 模块在 Python 中实现一个简单的 TCP 即时消息程序。当我在 connect() 中使用 socket.gethostname() 返回的值时,客户端在连接到在 localhost 上运行的 IM 服务器时工作得非常好。但是,当我使用 socket.gethostbyname(“localhost”) 返回的值时,客户端返回 errno 111(连接被拒绝)。有什么办法可以解决这个问题吗?
- 可能服务器没有在 localhost 上监听。您可以使用 netcat 或 telneta 进行测试,例如 nc localhost 111。除了简要提及之外,如果不了解有关您的服务器的任何信息,就无法诊断,但我的第一个猜测是您正在执行 bind((gethostname(), 111)) 而不是 bind(”, 111) 或类似的东西。
- @abarnert 这行得通!谢谢!
- 好的,我想我会把它变成一个答案。
如果您在尝试 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))
|
来源:https://www.codenong.com/14146212/