2016-12-07 11 views
2

クライアントがサーバにリストを送信し、サーバが配列を受け取り、リストの最初の2つの要素を削除して、それを元に戻すクライアント - サーバpythonプログラムを書いたクライアント。 リストを受信して​​いるサーバーに問題はありません。しかし、サーバーが編集したリストを返送したい場合、エラー: socket.error: [Errno 32] Broken pipeが表示されています。 client.pyとserver.pyは異なるIPを持つ異なるマシンから実行されています。socket.error:[Errno 32]壊れたパイプ

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(); 

全体のエラーMSGがある:私は以下のclient.pyとserver.pyためのコードを掲載してい

Traceback (most recent call last): 
File "server.py", line 22, in <module> 
s.send(data_string1); 
socket.error: [Errno 32] Broken pipe 

クライアントが編集したリストをサーバーからエラーなく受信できるように、この問題を解決するにはどうすればよいですか? ありがとうございます。あなたは小さなミス作ら

+0

メッセージがどこから来たのかを正確に示すために、エラートレースバック全体を含めてください。 – cdarke

+0

トレースバック(直前の最後のコール): ファイル "server.py"、行22、 s.send(data_string1); socket.error:[Errno 32]壊れたパイプ これはエラーメッセージ全体です。 – ArnabC

+0

OK、おそらくクライアントは 'recv'を落としてソケットを閉じました。おそらく、ソケットを早く閉じている理由を調べるために、クライアントをトレースする必要があります( 'print'文を入れてください)。 http://stackoverflow.com/questions/11866792/how-to-prevent-errno-32-broken-pipe – cdarke

答えて

1

s.send(data_string1); 

は次のようになります。

conn.send(data_string1); 

また、以下の行を変更する必要があります。

socket.shutdown();s.shutdown();

とTO:

socket.close();からs.close();

+0

Thanks Stanも参照してください。出来た ! – ArnabC

関連する問題