2016-11-24 120 views
0

我剛剛開始學習Python中的Socket庫。我正在學習一個教程,但在第一個例子中,當我嘗試運行它時遇到錯誤。連接插座給了ConnectionRefusedError

import socket    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 12345    # Reserve a port for your service. 

s.connect((host, port)) 
print(s.recv(1024)) 
s.close 

起初我手寫它,但經過幾次評論後得到錯誤信息,我直接將文本複製到Python並運行它。但由於某種原因,我仍然得到這個錯誤。

Traceback (most recent call last): 
    File "C:\Users\elikerr\Documents\socketFirstServer.py", line 7, in <module> 
    s.connect((host, port)) 
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it 

有人可以詳細說明發生了什麼問題。 這是我正在關注的tutorial。 我已經檢查了Stack Exchange上的一些答案,但他們都沒有回答我的問題,或者,如果他們這樣做,我不知道套接字知道我在找什麼。

+3

端口12345是否打開? –

+0

如何檢查端口是否打開? –

+1

您是否編寫了一個偵聽該端口的服務器,並且在運行客戶端之前運行它?如果不是,你期望連接到什麼? – Barmar

回答

1

由於您只發布客戶端代碼,我會假設您在設置服務器之前先寫入客戶端。

您需要將以下代碼放在文件(server.py)中並運行它。

#!/usr/bin/python   # This is server.py file 

import socket    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 12345    # Reserve a port for your service. 
s.bind((host, port))  # Bind to the port 

s.listen(5)     # Now wait for client connection. 
while True: 
    c, addr = s.accept()  # Establish connection with client. 
    print 'Got connection from', addr 
    c.send(b'Thank you for connecting') # Send bytes 
    c.close()    # Close the connection 

現在驗證服務器是否正在運行,像這樣:

C:\Users\pp9x2>netstat -an | findstr 12345 
TCP 192.168.56.1:12345  0.0.0.0:0    LISTENING 

現在使用您發佈確切的代碼,一切都應該只是工作。

+0

謝謝。我會在稍後嘗試。 –

+0

另外,您是否需要連接到互聯網才能正常工作? –

+0

不,你不需要互聯網。您可以在沒有任何網絡設備的情況下執行此操作,因爲您正在或將要在同一臺計算機上同時運行服務器和客戶端。看看這個維基百科[文章](https://en.wikipedia.org/wiki/Network_socket)它的簡短並可能會清除一些事情。不管怎樣,如果它回答你的問題,請不要忘記接受我的答案。 – preezzzy