2013-06-23 89 views
0

我想從服務器發送文件到客戶端,但得到錯誤。請讓我知道我做錯了什麼。Python:文件傳輸給出錯誤

這是我的服務器代碼:

if msg in data.keys(): 
print("Requested file exists", msg) 
    f=open(msg,"rb") 
    datam= f.read(1024) 

    while (datam): 

     if(s.send(datam)): 

     print "sending data" 

     datam = f.read(1024) 



     s.close() 

     f.close 
else: 
    print("File Not found",msg) 
    print("File Not found",data.keys()) 
    c.close()    # Close the connection 

其中msg包含其中文件存在 C =客戶端套接字s =服務器套接字 路徑地址我想讀該文件,並將其發送給客戶端,但我得到這個錯誤

Got connection from ('127.0.0.1', 42330) 
('Requested file exists', '/home/beenish/Pictures/pew.txt') 
Traceback (most recent call last): 
File "server.py", line 41, in <module> 
if(s.send(datam)): 
socket.error: [Errno 32] Broken pipe 

在客戶端,我寫了這個代碼收到該文件

s.listen(15) 
f = open('\home\beenish\pictures\lol.txt', 'wb') 
data = s.recv(1024) 

while(data): 


f.write(data) 

data=s.recv(1024) 

    f.close() 
    s.close      # Close the socket when done 

s是客戶端套接字

在這裏,我得到這個錯誤

Traceback (most recent call last): 
File "client.py", line 26, in <module> 
s.listen(15) 
File "/usr/lib/python2.7/socket.py", line 224, in meth 
return getattr(self._sock,name)(*args) 
socket.error: [Errno 22] Invalid argument 
+0

將發送/接收放入try/catch/finally塊是一個很好的做法:當通信發生變化時,您只需關閉插槽並防止程序炸燬。 – lucasg

回答

0

在你有這一行的錯誤客戶端:

s.listen(15) 

而且Python docs說,參數具有系統相關的最大值,通常爲5.因此,請嘗試找出系統中使用較低值的最大值並查看發生了什麼。

服務器端錯誤可能是客戶端故障的副作用。

0

這就是您在致電socket.bind之前致電socket.listen時所得到的那種錯誤。請記住,服務器必須按照該特定順序遵循序列socket()bind(),listen()accept()

+0

在服務器端,我已經遵循了相同的順序。我認爲在服務器端的while循環中發送方法有一些問題,但我不知道... – Xara

+0

@Zara我已經檢查出來了,現在我看到了其他的東西:你在客戶端調用'bind' ,而你只應該調用'socket()'和'connect()'。 –

+0

您可以請詳細說明...我不明白 – Xara