2013-10-08 33 views
0

我有三臺機器連接到沒有互聯網的集線器,我試圖使用一個代碼,像在Python 3.3中的聊天服務。但是,當我運行發送代碼時,它停滯在偵聽連接...並且當我啓動另一臺機器上的第二個程序來接收它時,會出現以下錯誤消息:這個蟒蛇聊天程序有一些小故障

回溯(最近一次調用最後一次): 文件「C:\ Python33 \ recv.py」,第5行,在 s.connect((主機,端口)) TimeoutError:[WinError 10060]連接嘗試失敗,因爲連接方在一段時間後沒有正確響應的時間,或建立的連接失敗,因爲連接的主機未能響應。

這是第一個代碼發送消息:

host = "127.0.0.1" 
port = 4446 
from socket import^
s = socket(AF_INET, SOCK_STREAM) 
s.bind((host,port)) 
s.listen(1) 
print("listening for connections...") 
q,addr = s.accept() 
data = input("Data to be sent: ") 
q.send(data) 
s.close() 

這裏是第二碼接收:

host = "86.10.137.206" 
port = 4446 
from socket import * 
s = socket(AF_INET, SOCK_STREAM) 
s.connect((host,port)) 
msg = s.recv(1024) 
print("This is the message:",msg) 
s.close() 

可以做些什麼來解決這個問題。是否與127.0.0.1

+0

主機在每個程序中表示不同的內容。在第一個程序中,您將套接字綁定到主機IP。在第二個中,您嘗試連接到「主機」IP。第二個程序中的「host」是第一個程序的IP嗎? – rlms

+0

對不起,我不明白你的意思。您是否建議127.0.0.1對於主機是正確的,但接收功能應該與物理筆記本電腦IP一起運行? –

+0

是的,「127.0.0.1」的意思是「這臺電腦的IP」。第二個程序需要在計算機上運行第一個程序在IP上運行。 – rlms

回答

0

IP地址127.0.0.1是環回地址,並被視爲特殊。它用於本地系統上的進程間通信 - 數據包不會離開系統。

請查找並列出每個系統的IP地址。你應該有一個路由器或通過DHCP或其他方式分配IP地址的東西。使用ifconfig顯示所有接口,並獲取插入到集線器的接口的IP地址。

每個客戶端都必須配置爲偵聽服務器地址。

將您的主機端口更改爲=',因爲對於INADDR_ANY,這是pythonese。通過指定127.0.0.1,您可以指定迴環端口上的監聽,

host = '' 
port = 4446 
from socket import^
s = socket(AF_INET, SOCK_STREAM) 
s.bind((host,port)) 
s.listen(1) 
print("listening for connections...") 
q,addr = s.accept() 
data = input("Data to be sent: ") 
q.send(data) 
s.close() 
+0

我想在本地系統上進行通信,而不是在外部系統上進行通信。我明白127.0.0.1是環回地址。我只需要更改第二段代碼即可 –

+0

服務器需要偵聽外部接口。客戶端需要連接到服務器的外部接口。幽默我,在你的服務器上,把它的IP地址放入主機,並在客戶端,把相同的地址。 – ChuckCottrill

+0

這裏是一個頁面,解釋當你指定要綁定的各種地址時,INADDR_ANY與特定地址,http://www.scottklement.com/rpg/socktut/bindapi.html – ChuckCottrill