使用Python Socket库开发信使程序的IP配置问题求助
Python Socket信使程序IP配置问题解决方案
问题描述
我想用Python Socket库开发一款信使程序,分为服务端和客户端,二者处于同一网络环境。以下是我的代码:
服务端代码
import socket import os os.system('clear') s = socket.socket() ip = 'localhost' port = 9999 s.bind((ip,port)) s.listen() print ('please wait...') c , addr =s.accept() print ('someone has joined!') class color : GREEN = '\033[92m' RED = '\033[91m' WHITE = '\033[0m' while True : msg = input(color.RED + 'your message: ' ) c.send(msg.encode('utf8')) print (color.GREEN + c.recv(1024).decode())
客户端代码
import socket import os os.system('clear') s=socket.socket() ip='192.168.1.3' port=9999 s.connect((ip,port)) print('you have been connected' ) class color : GREEN = '\033[92m' RED = '\033[91m' WHITE = '\033[0m' while True: print (color.RED + s.recv(1024).decode()) msg = input(color.GREEN + 'your message : ') s.send(msg.encode('utf8'))
我需要为两端设置正确的IP地址,但尝试多种方法均无效,恳请提供可行方案。
尝试方法及报错
- 方法1:将服务端IP设为
localhost、gethostname或gethostbyname返回值:服务端运行正常,但客户端无法连接。 - 方法2:将服务端IP设为如
192.168.0.3这类地址:服务端抛出错误:OSError: [WinError 10049] 请求的地址在其上下文中无效。 - 补充:尝试推荐方法后,客户端报错:
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
解决方案
1. 修正服务端绑定地址
服务端不要绑定到特定IP,改为绑定到0.0.0.0,这样可以监听所有可用的网络接口,避免IP配置错误导致的绑定失败:
ip = '0.0.0.0'
2. 获取服务端局域网IP
在服务端机器上执行对应命令获取真实局域网IP:
- Windows:打开命令提示符,输入
ipconfig,找到对应网络适配器下的IPv4地址(如192.168.1.XX)。 - Linux/macOS:打开终端,输入
ifconfig或ip addr,找到对应网络接口的inet地址。
3. 配置客户端连接地址
将客户端代码中的ip变量修改为服务端的局域网IP,例如服务端IP为192.168.1.5,则客户端代码:
ip='192.168.1.5'
4. 排查连接拒绝问题
若仍出现WinError 10061,按以下步骤排查:
- 确保先启动服务端,再运行客户端。
- 确认服务端和客户端处于同一局域网(连接同一WiFi或网线)。
- 临时关闭服务端机器的防火墙测试(测试通过后可将程序添加到防火墙白名单)。
- 检查端口
9999是否被占用:Windows用netstat -ano | findstr :9999,Linux/macOS用lsof -i :9999,若被占用则更换端口。
内容的提问来源于Stack Exchange,提问作者Parsa Ad
相关产品推荐
相关产品推荐

