2011-10-19 19 views
1

對於一個類項目,我試圖做一些套接字編程Python,但遇到了一個非常基本的問題。我無法從筆記本電腦到實驗室機器創建TCP連接。 (我希望用作「服務器」)甚至沒有進入我寫的腳本,我一直在嘗試解釋行命令,但沒有成功。在實驗室機(kh4250-39.cselabs.umn.edu)我鍵入以下的Python:在Python中啓動TCP連接時出現問題 - 阻塞和超時

from socket import * 
sock = socket() 
sock.bind(('', 8353)) 
sock.listen(5) 
sock.accept() 

,然後在我的筆記本電腦I型:

from socket import * 
sock = socket() 
sock.connect(('kh4250-39.cselabs.umn.edu', 8353)) 

在這一點兩臺機器塊在客戶超時或我發送SIGINT之前不做任何事情。這段代碼幾乎完全從我在網上找到的例子以及Mark Lutz的Programming Python(使用''作爲服務器主機名顯然使用OS默認並且相當常見)書中複製。如果我在計算機中運行兩端,並使用'localhost'作爲主機名,那麼它工作正常,所以我懷疑這是我在一端或兩端使用的主機名的問題。我真的不確定這樣一個簡單的例子會出現什麼問題。有人有想法嗎?

+0

也許有一個包過濾器或類似的東西涉及。 – glglgl

回答

1

的一個好方法,以確認它是否是一個防火牆問題還是沒有對問題進行從命令行一個telnet到目的主機:

% telnet kh4250-39.cselabs.umn.edu 8353 
Trying 128.101.38.44... 

再等等metime後:

telnet: connect to address 128.101.38.44: Connection timed out 

如果它只是在Trying掛在那兒,然後最終超時,很有可能被防火牆阻止特定端口到遠程主機的連接。它可以位於網絡層(例如真正的防火牆或路由器訪問列表),也可以位於主機,例如iptables或其他基於主機的過濾機制。

只能從實驗室或校園網絡內訪問此實驗室主機。與您的教授或網絡管理員或網絡中的「知道」人員進行交談,以便確定。

0

嘗試將服務器綁定到「kh4250-39.cselabs.umn.edu」而不是「」:

sock.bind(('kh4250-39.cselabs.umn.edu', 8353)) 

如果這不起作用:另一個原因可能是防火牆阻止端口8353。 ...

+1

特定的綁定地址將無濟於事。他現在綁定到INADDR_ANY。 – EJP