Client-server pythonプログラムを作成しました。このプログラムでは、クライアントがサーバーにリストを送信し、サーバーが配列を受け取り、リストの最初の2つの要素を削除してクライアントに送り返します。リストを受信するサーバーに問題はありませんが、サーバーが編集済みリストを送り返したい場合、エラーが表示されます:socket.error: [Errno 32] Broken pipe
。 client.pyとserver.pyは、異なるIPを持つ異なるマシンから実行されています。以下にclient.pyとserver.pyのコードを投稿しています。
Client.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;
Server.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
クライアントがエラーなしでサーバーから編集済みリストを受信できるように、この問題を修正するにはどうすればよいですか?前もって感謝します。
あなたは小さな間違いを犯しました:
_s.send(data_string1);
_
する必要があります:
_conn.send(data_string1);
_
また、次の行を変更する必要があります。
socket.shutdown();
からs.shutdown();
へ
そして:
socket.close();
からs.close();
へ