Python TCP Socket客户端与服务端无法连接报错求助
问题根因
- 混淆了TCP服务端两类套接字的作用:
serverSocket是监听专用套接字,仅负责响应客户端的连接申请,不能用于收发已连接客户端的业务数据 accept()方法返回的clientSocket才是与当前客户端绑定的已连接套接字,所有和该客户端的数据交互都必须通过这个套接字完成- TCP是面向连接的传输协议,无需使用UDP专用的
recvfrom()方法,直接调用recv()接收数据即可,也不需要额外获取地址返回值
修正后代码
server.py
from socket import * serverPort = 11500 serverSocket = socket(AF_INET, SOCK_STREAM) serverSocket.bind(('', serverPort)) print("The server is listening") serverSocket.listen(1) # 接收客户端连接,获取通信专用套接字 clientSocket, clientAddress = serverSocket.accept() print(f"已和客户端{clientAddress}成功建立连接") # 通过已连接套接字接收数据 message = clientSocket.recv(2048) print(f"收到客户端发送的消息:{message.decode()}") # 回收资源 clientSocket.close() serverSocket.close()
client.py(可选优化,原有逻辑无错误,补充资源回收即可)
from socket import * serverName = "127.0.0.1" serverPort = 11500 clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((serverName, serverPort)) message = "Hello" clientSocket.send(message.encode()) clientSocket.close()
验证方法
- 先在终端运行修改后的server.py,会打印监听提示
- 再开启新终端运行client.py,server端会正常输出收到的
Hello消息,无报错
内容的提问来源于stack exchange,提问作者TJS
相关产品推荐
相关产品推荐

