Python socket.send无法工作,请求排查简单客户端-服务器应用问题
问题排查与修复方案
嘿,我一眼就看到了代码里的两个关键问题,这就是导致socket.send无法工作的原因:
1. 服务器端用错了套接字对象
你在服务器里用监听套接字s调用了send(),但监听套接字的作用只是接受新连接,不能用来和客户端通信。真正用来和客户端收发数据的是accept()方法返回的那个客户端连接套接字c。
2. 客户端recv()缺少必要参数
客户端代码里的serSocket.recv(...)没有指定接收的最大字节数,这个参数是必须的,比如填1024(表示一次最多接收1024字节的数据)。
修正后的服务器代码
# Server use decode import socket s = socket.socket() host = socket.gethostname() port = 12345 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept() print("Got connection from " + str(addr)) # 改用客户端连接套接字c来发送数据 ret_val = c.send("Thank you".encode('utf-8')) print("ret_val={}".format(ret_val)) c.close()
修正后的客户端代码
# Client use decode from socket import gethostname, socket serSocket = socket() server = gethostname() port = 12345 serSocket.connect((server, port)) # 指定接收字节数,并解码成字符串 data = serSocket.recv(1024).decode('utf-8') print("Received from server:", data) serSocket.close()
额外提示
- 记得在客户端接收数据后调用
decode('utf-8'),和服务器端的encode对应,避免出现字节串而非字符串的情况。 - 可以考虑添加异常处理(比如
try-except块),来处理连接中断、发送失败等异常场景,让程序更健壮。
内容的提问来源于stack exchange,提问作者OJNSim
相关产品推荐
相关产品推荐

