Python 通过互联网的 SOCK_STREAM

2 投票
1 回答
5501 浏览
提问于 2025-04-15 14:26

我有一个简单的程序,用于创建套接字客户端和服务器,但在互联网上无法正常工作。

# 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 写了一个程序来传输图片,这在本地运行得很好,但在互联网上却不行。所以我写了一个最简单的程序,但问题依然存在。

有人能帮我解决这个问题吗……

1 个回答

5

你做的方式是对的,但可能遇到了网络或防火墙的问题。根据你朋友的网络设置,他可能在一个叫做NAT的环境下,或者有防火墙,这会阻止你直接连接到他的电脑。

为了排除一半的问题,你可以用 telnet 这个工具来简单地连接到服务器,看看它是否可以用:

telnet 127.0.0.1 3000

如果 telnet 成功连接上了,那就说明网络是正常的。如果连接失败,那就说明还有其他问题(这可能会给你一些线索,帮助你找出问题所在)。

撰写回答