互联网上的Python SOCK_STREAM

时间:2009-09-19 08:55:45

标签: python sockets

我有一个简单的套接字客户端和服务器程序,它无法在互联网上工作

# 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替换。

在localhost上工作时,它可以正常工作但不能通过互联网工作......

我使用SOCK_DGRAM编写了程序,它只能在互联网上处理小块数据。我想使用它来传输图像,所以我使用SOCK_STREAM来编写它,用于传输在localhost上成功运行并且无法在Internet上工作的图像。所以我写了最简单的程序,但仍然显示相同的问题

有人可以通过这个来指导我......

1 个答案:

答案 0 :(得分:4)

您有正确的方法,但您可能遇到网络或防火墙问题。根据您朋友的网络配置方式,他可能会在NAT或防火墙后面阻止您直接连接到他的计算机。

要消除问题的一半,您可以使用telnet作为客户端与服务器建立简单连接,以查看它是否可用:

telnet 127.0.0.1 3000

如果telnet成功连接,则网络正常工作。如果失败了,那么还有其他错误(可能会给你提供可能有助于发现内容的信息)。