互联网上的 Python SOCK_STREAM

Xin*_*nus 2 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)
Run Code Online (Sandbox Code Playgroud)

当我们尝试让它通过互联网工作时,它无法连接。程序如上所示,唯一的是目标ip被我的朋友ip替换了。

在本地主机上工作时,它工作得很好,但不能在互联网上工作......

我已经编写了使用SOCK_DGRAM它的程序,它仅适用于互联网上的小块数据。我想使用它传输图像,所以我写了它 SOCK_STREAM用于传输在本地主机上成功运行但不能通过互联网工作的图像。所以我确实写了最简单的程序,但仍然显示同样的问题

有人可以指导我完成这个...

Gre*_*ill 5

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

为了解决一半的问题,你可以telnet作为客户端使用,与服务器进行简单的连接,看看是否可用:

telnet 127.0.0.1 3000
Run Code Online (Sandbox Code Playgroud)

如果telnet连接成功,则网络正常工作。如果它失败了,那么还有其他问题(并且可能会为您提供可能有助于发现问题的信息)。