簡體   English   中英

socket.error:[Errno 32]管道破裂

[英]socket.error: [Errno 32] Broken pipe

我寫了一個客戶端 - 服務器python程序,客戶端向服務器發送一個列表,服務器接收數組,刪除列表的前兩個元素並將其發送回客戶端。 接收列表的服務器沒有問題。 但是當服務器想要發送回編輯的列表時,它顯示錯誤: 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM