2012-10-20 63 views
23

我遇到這些客戶機和服務器代碼有問題,我不斷收到[Errno 10061]因爲目標機器積極拒絕它Errno 10061:由於目標機器主動拒絕它(客戶機 - 服務器),因此無法建立連接

我在Windows XP SP3的虛擬機上運行服務器,在Windows 7 64bit上運行客戶機,我的python版本是2.7.3。我想知道的是如何編輯代碼以在不同網絡上使用客戶端和服務器!謝謝!

服務器:

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

import socket    # Import socket module 
s = socket.socket()   # Create a socket object 
host = '0.0.0.0' # Get local machine name 
port = 12345    # Reserve a port for your service. 


print 'Server started!' 
print 'Waiting for clients...' 

s.bind((host, port))  # Bind to the port 
s.listen(5)     # Now wait for client connection. 
c, addr = s.accept()  # Establish connection with client. 
print 'Got connection from', addr 
while True: 
    msg = c.recv(1024) 
    print addr, ' >> ', msg 
    msg = raw_input('SERVER >> ') 
    c.send(msg); 
    #c.close()    # Close the connection 

客戶端:

#!/usr/bin/python   # This is client.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. 

print 'Connecting to ', host, port 
s.connect((host, port)) 

while True: 
    msg = raw_input('CLIENT >> ') 
    s.send(msg) 
    msg = s.recv(1024) 
    print 'SERVER >> ', msg 
#s.close      # Close the socket when done 

PS:代碼是從互聯網上。

+2

_actively refused it_暗示服務器機器的防火牆阻塞了連接,可能與代碼無關。 –

+0

防火牆已關閉:/仍然出現錯誤 – havox

+2

您的VM guest虛擬機如何連接到網絡?通過NAT +端口轉發或橋接模式? –

回答

19

10061是WSAECONNREFUSED,'連接被拒絕',這意味着在您試圖連接的IP:端口上沒有任何監聽。

2000年前後發佈了一款防火牆產品,它發佈了拒絕服務而不是忽略到阻塞端口的傳入連接,但這很快就被認爲是向攻擊者泄露的信息,並被糾正或撤銷。

2

使用以下示例:https://docs.python.org/3.2/library/socketserver.html 我確定需要將HOST端口設置爲運行服務器程序的計算機。因此,TCPServer在192.168.0.1 HOST = TCPServer IP 192.168.0.1上,我必須將TCPClient端設置爲指向TCPServer IP。所以TCPClient HOST值= 192.168.0.1 - 對不起,這是我能描述的最好的。

+1

換句話說,您的目標IP地址錯誤。 – EJP

3

提示:actively refused聽起來有點更深層次的技術故障,但...

...其實,這種反應(還特意errno:10061)也給出,如果調用的bin /蒙戈上的可執行and the mongodb service is simply not running目標機器。這甚至適用於本地機器實例(全部發生在本地主機上)。

總是排除這種微不足道的可能性,首先是,即簡單地通過使用命令行客戶端來訪問您的數據庫。

See here.

-1

的解決方案是使用相同的IP和端口號在客戶端和服務器。 嘗試,在客戶端使用 TCP_IP =「在這裏寫的IP號」 TCP_PORT =這裏 s.connect((TCP_IP,TCP_PORT))

+0

解決方案通常在服務器中使用0.0.0.0。 – EJP

0

令狀的端口號,如果你有你的機器上安裝了遠程服務器。將server.py主機設置爲「本地主機」和端口號。 然後在客戶端,你必須給本地ip-127.0.0.1和端口號。 那麼它的作品

+0

問題是關於'不同的網絡',這個答案甚至不能在同一網絡中的不同主機上工作,更不用說不同的網絡。 – EJP

-1

短期的解決方案是使用默認的iis主機和端口,通常分別爲120.0.0.1和80。但是我仍然在尋找更多功能的解決方案。

+0

鑑於OP在兩臺機器上運行,並且這是一個本地主機解決方案,它不太可能工作? – roelofs

+0

並且假設localhost是127.0.0.1,而不是120.0.0.1,它甚至不能在一臺主機上工作。 – EJP

相關問題