簡體   English   中英

Python socket.error: [Errno 111] 連接被拒絕

[英]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.

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