繁体   English   中英

2 个不同网络上的 Python 2.7 套接字连接?

[英]Python 2.7 Socket connection on 2 different networks?

标题说明了一切。 我有一个客户端和一个服务器设置,但它们只适用于本地主机。 如何从不同的网络连接到套接字?

客户

# Echo client program
import socket
print "Client"
HOST = "localhost"               # Symbolic name meaning all available interfaces
PORT = 5001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
while True:
    data2 = raw_input()
    s.sendall(data2)

服务器

# Echo server program
import socket
print "Server"
HOST = ""           # Symbolic name meaning all available interfaces
PORT = 5001              # 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
while 1:
    data = conn.recv(1024)
    print data
    if data == "Ping":
        print "Pong!"

conn.close()
  1. 使用在线工具(如http://whatismyipaddress.com/)检查您的公共 IP 地址
  2. 在 linux 的 windows ifconfig 中使用 ipconfig -a 检查您的本地 ip 地址。

现在,如果您在 dsl 路由器后面(通常是您),这些地址就完全不同了。 因此,您必须告诉您的路由器在收到 TCP 端口 XXXX 的连接尝试时发送,将其转发到“我的机器”(称为端口转发)。 尽管大多数路由器的端口转发设置都相似,但没有标准(通常在路由器 Web 配置界面上的 NAT/端口转发菜单项下)。 您可能需要搜索特定型号的说明。在端口转发之前将您的计算机设置为使用静态 IP 地址是个好主意。否则,如果您的计算机通过 DHCP 分配了另一个 IP 地址,则设置将无效。

如果端口转发成功,现在您只需将客户端应用程序设置为连接到您的公共 IP 地址。 在您的特定情况下,您的客户端源代码中的 HOST = "XXXX" 。 检查端口转发是否适用于您从某处下载的套接字测试器应用程序。 (不要用你的实验代码测试它,使用你确定它工作的应用程序)。 一切都不起作用,请查看下面的注释。 不过,这是最后的手段。

注意:为了安全起见,一些 ISP 将他们的客户置于额外的防火墙之后。 检测是否是这种情况的一种简单方法是,您在路由器 Web 界面中看到的 Wan ip 地址将与您在 whatsmyip 等在线工具中看到的不同。 在这种情况下,无论您做什么,都将无法连接。 您必须致电您的 ISP 并告诉他们为您的连接禁用防火墙。 您可能很难向他们解释您在说什么:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM