2009-09-19 33 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