【发布时间】:2017-04-22 04:58:13
【问题描述】:
我写了一个客户端-服务器python程序,客户端向服务器发送一个列表,服务器接收数组,删除列表的前两个元素并将其发送回客户端。
服务器接收列表没有问题。但是当服务器想要发回编辑后的列表时,它会显示错误:
socket.error: [Errno 32] Broken pipe。
client.py 和 server.py 运行在具有不同 ip 的不同机器上。我在下面发布了 client.py 和 server.py 的代码:
客户端.py
import socket, pickle
HOST = '192.168.30.218'
PORT = 50010
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
arr = ['CS','UserMgmt','AddUser','Arnab','Password']
data_string = pickle.dumps(arr)
s.send(data_string)
data = s.recv(4096)
data_arr1 = pickle.loads(data)
s.close()
print 'Received', repr(data_arr1)
print data_arr1;
服务器.py:
import socket, pickle;
HOST = '127.0.0.1';
PORT = 50010;
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM);
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
s.bind(('',PORT));
s.listen(1);
conn, addr = s.accept();
print 'Connected by' , addr;
data_addr = list();
while 1:
data = conn.recv(4096);
if not data: break;
data_addr = pickle.loads(data);
print 'Received Data', repr(data_addr);
print data_addr;
data_addr.pop(0);
data_addr.pop(0);
print data_addr;
data_string1 = pickle.dumps(data_addr);
s.send(data_string1);
break;
conn.close();
socket.shutdown();
socket.close();
整个错误信息是:
Traceback (most recent call last):
File "server.py", line 22, in <module>
s.send(data_string1);
socket.error: [Errno 32] Broken pipe
我该如何解决这个问题,以便客户端可以从服务器接收编辑后的列表而不会出现任何错误? 提前谢谢你。
【问题讨论】:
-
请包含整个错误回溯,以指明消息的确切来源。
-
Traceback(最近一次调用最后一次):文件“server.py”,第 22 行,在
s.send(data_string1); socket.error: [Errno 32] Broken pipe 这是整个错误消息。 -
好的,客户端很可能已经通过
recv并关闭了套接字。您可能需要跟踪客户端(放入一些print语句)以查看它为什么过早关闭套接字。另见stackoverflow.com/questions/11866792/…
标签: python python-2.7 sockets network-programming