其他分享
首页 > 其他分享> > socket bind遇到的问题

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

标签:127.0,socket,sck,遇到,0.1,ip,bind,localhost
来源: https://blog.csdn.net/qq_38420683/article/details/119428921