socket bind遇到的问题

问题
简单的socket通信代码如下。当service 和client都在同一台机器上时,使用loaclhost 或127.0.0.1 为ip地址时,是ok的。但将client地址换位真实的ip地址时,无法连通。

# service.py
import socket
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.bind(("localhost", 8001))
sck.listen(5)

while True:
    conn, addr = sck.accept()
    print(addr)
# client.py
import socket
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = ('127.0.0.1', 8001)
sck.connect(ip)
sck.close()

首先说明当前代码为什么可以运行。localhost和127.0.0.1是等价的,所以是可以的。

当客户端部署到另一台机器上时,需要向某个ip发送请求,但服务器值bind了localhost,而没有bind对应的局域网中的ip,所以只修改客户端中的ip是无法进行访问的。必须保证服务器和客户端都使用相同的ip。

127.0.0.1 和localhost

命令ifconfig会列出当前全部的网卡,其中有lo的是本地的,ip为127.0.0.1,也就是localhost。这个在ubuntu中是写在 /etc/hosts 中,可以通过以下命令查看。localhost是一个域名,只是默认对应127.0.0.1,可以通过修改上述文件来修改映射。

cat  /etc/hosts
上一篇:PyTorch-TensorBoard-Linux远程服务器-可视化配置


下一篇:修改this的指向