[英]Python socket.error: [Errno 111] Connection refused
我正在嘗試編寫一個使用套接字進行文件傳輸的程序。 代碼的服務器端運行良好。 但是,在客戶端,我收到以下錯誤
Traceback (most recent call last):
File "client.py", line 54, in <module>
uploadFiles(directory)
File "client.py", line 36, in uploadFiles
transferFile(fname)
File "client.py", line 13, in transferFile
cs.connect((HOST, 36258))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused
我的代碼如下
import os
import socket
def transferFile(fname):
HOST = '127.0.0.1'
CPORT = 36258
MPORT = 36250
FILE = fname
cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cs.connect((HOST, 36258))
cs.send("SEND " + FILE)
cs.close()
ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ms.connect((HOST, MPORT))
f = open(FILE, "rb")
data = f.read()
f.close()
ms.send(data)
ms.close()
def uploadFiles(directory):
home = os.getenv("HOME")
folder = str(home + "/" + directory)
os.chdir(folder)
dirList = os.listdir(folder)
print dirList
for fname in dirList:
if fname.endswith('.bin'):
transferFile(fname)
os.chdir(os.getenv("HOME"))
directory = "testdownload"
if not os.path.exists(directory):
os.makedirs(directory)
os.chdir(directory)
uploadFiles(directory)
我嘗試在 Google 和 Stack Overflow 上的其他帖子上尋求幫助,但都沒有幫助。 有人可以幫幫我嗎? 行號可能不同,因為我只粘貼了部分代碼
問題顯然是(如您所想)在您嘗試連接時服務器端的端口 36250 未打開(因此連接被拒絕)。 我可以看到服務器應該在另一個連接上收到SEND
命令后打開這個套接字,但它顯然“沒有打開 [它] 與客戶端同步”。
嗯,主要原因是沒有任何同步。 打電話:
cs.send("SEND " + FILE)
cs.close()
只會將數據放入操作系統緩沖區; close
可能會刷新數據並推送到網絡中,但它幾乎肯定會在數據到達服務器之前返回。 在close
后添加sleep
可能會緩解問題,但這不是同步。
正確的解決方案是確保服務器已打開連接。 這將需要服務器向您發回一些消息(例如OK
或更好的PORT 36250
以指示連接位置)。 這將確保服務器已經在偵聽。
另一件事是您必須檢查send
的返回值以確保從您的緩沖區中取出了多少字節。 或者使用sendall
。
(很抱歉打擾了這個遲到的回答,但我發現這是一個高流量問題,我真的不喜歡評論部分的睡眠想法。)
I am also having the same problem
Traceback (most recent call last):
File "sample3.py", line 7, in <module>
practice.connect(("192.168.43.130", 22))
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 101] Network is unreachable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.