2009-09-19 132 views
2

我有插座的客戶端和服務器的簡單程序其不能通過互聯網Python的SOCK_STREAM通過互聯網

# Echo server program 
import socket 
import ImageGrab 

HOST = ''     # Symbolic name meaning all available interfaces 
PORT = 3000    # Arbitrary non-privileged port 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
data = conn.recv(1024) 
print data 
conn.close() 


# Echo client program 
import socket 
import ImageGrab 
#destnation ip 
HOST = '127.0.0.1' # The remote host 
PORT = 3000    # The same port as used by the server 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 
s.send('Hello rushikesh') 
s.close() 
print 'Received'#, repr(data) 

工作當我們試圖讓它工作在網上是無法連接。程序如上圖所示只是目的地ip被我的朋友ip替換。

當工作在本地主機它工作完全正常,但沒有工作過互聯網......

我一直在使用SOCK_DGRAM它工作在網絡僅用於數據的小塊寫入的程序。我想用它傳輸圖像,所以我使用SOCK_STREAM來傳輸圖像,用於傳輸在localhost上成功運行並且不能通過互聯網工作的圖像。所以,我沒有寫簡單的程序,但仍表現出同樣的問題

能有人請我的GUID通過這個...

+0

據說主機'localhost'或'127.0.0.1'只會聽lan,但'0.0.0.0'會聽所有的適配器。 – Luke 2016-07-12 11:27:19

回答

4

你有正確的方法,但你很可能遇到了網絡或防火牆問題。根據朋友的網絡配置情況,他可能在NAT或防火牆後面,防止您直接連接到他的計算機。

爲了消除一半的問題,你可以使用telnet作爲客戶端向服務器的簡單連接,看看是否可用:

telnet 127.0.0.1 3000 

如果telnet連接成功,則該網絡的工作原理。如果失敗了,那麼還有其他問題(並且可能會給你提供可能有助於發現的信息)。

+0

嗨,telnet連接失敗。但是使用SOCK_DGRAM的p2p通信工作正常,給我提供了像功能一樣的聊天功能,也適用於小圖片。是否是SOCK_STREAM需要連接的情況,SOCK_DGRAM是通過某種不同的機制工作的。 – Xinus 2009-09-19 11:02:00

+0

我們之間沒有任何代理或NAT。我們有一個來自isp的通用寬帶連接。我們沒有靜態IP。這是原因嗎?但那麼SOCK_DGRAM是如何工作的。可能是SOCK_DGRAM不需要靜態IP? – Xinus 2009-09-19 12:59:21

+0

也許服務器端isp阻塞偵聽(服務器)TCP套接字?如果您在那裏啓動Web服務器,它是否可以通過互聯網工作? – macbirdie 2009-09-19 13:13:23