Python 2.7 Socket连接在2个不同的网络上?

时间:2016-07-20 00:25:50

标签: python sockets networking

标题说全部。我有一个客户端和一个服务器设置,但它们只能与localhost一起使用。如何从其他网络连接到套接字?

客户端

# 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 个答案:

答案 0 :(得分:0)

  1. 使用http://whatismyipaddress.com/
  2. 等在线工具检查您的公共IP地址
  3. 使用linux中的windows ifconfig中的ipconfig -a检查本地IP地址。
  4. 现在如果你在dsl路由器后面(通常是你),这些地址是完全不同的。因此,每当连接尝试接收到TCP端口XXXX时,必须告诉路由器发送,将其转发到“我的机器”(称为端口转发)。虽然端口转发设置在大多数路由器中类似,但是没有标准(通常在路由器Web配置界面上的NAT /端口转发菜单项下)。您可能必须搜索特定型号的说明。最好将您的计算机设置为在端口转发之前使用静态IP地址。否则,如果您的计算机通过DHCP分配了另一个IP地址,则设置将无效。

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

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