在 Python 中通过 Internet 进行套接字连接?

新手上路,请多包涵

我在 Python 2.7.x 中创建了一个基本的客户端服务器套接字程序,即使在不同的机器上,它也可以在同一网络上运行,但是当我在不同的网络上运行服务器和客户端时(服务器在我朋友的网络上,而客户端在我的网络上)它不返回任何错误并继续等待。我只是不明白如何调试代码。我通过终止端口 80 上的所有服务来使用端口 80。我还在两台机器上的端口 80 上完成了端口转发。

我的代码如下:

客户端.py

 import socket

s = socket.socket()
host = '103.47.59.130'
port = 80

s.connect((host, port))
while True:
    print "From Server: ", s.recv(1024)  #This gets printed after sometime
    s.send(raw_input("Client please type: "))

s.close()

服务器.py

 import socket

s = socket.socket()         # Create a socket object
host = '192.168.0.104'    #private ip address of machine running fedora
port = 80
s.bind((host, port))

s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr    #this line never gets printed
while True:
   c.send(raw_input("Server please type: "))
   print "From Client: ", c.recv(1024)

c.close()

它有时会输出 **From Server: ** 但不会来回发送任何消息。

PS: 我之前在 Stack Overflow 上搜索过,但找不到任何相关内容。

原文由 Sanyam Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 432
1 个回答

使用此 软件 实现端口转发。我建议您为您的服务器使用另一个端口,比如 5006,以防止与使用 80 等非常常用的端口相关的任何问题。基本上,该软件是这样工作的:

  • 您单击“连接”,它会搜索路由器,如果找到您的路由器,它会列出现有的端口映射。
  • 您创建一个端口映射(在右侧),默认协议是 TCP
  • 您在路由器上选择一个端口,例如 5001(称为外部端口)
  • 您在服务器上选择一个端口,可能是 5006(称为内部端口)
  • 然后将指示路由器使用您的私有 IP 将到达端口 5001 的所有数据转发到您的服务器,特别是转发到您服务器上的端口 5006。

因此,您的客户端所要做的就是将数据发送到您服务器的公共 IP,特别是端口 5001。这些数据当然会首先到达您的路由器,路由器将按配置运行并将所有内容转发到您服务器的端口 5006。所有这些仅当您的互联网网关支持端口转发时才有效。

客户:

 import socket

s = socket.socket()
host = '103.47.59.130'
port = 5001

s.connect((host, port))
while True:
    try:
        print "From Server: ", s.recv(1024)
        s.send(raw_input("Client please type: "))
    except:
        break
s.close()

服务器:

 import socket

s = socket.socket()         # Create a socket object
host = '192.168.0.104'    #private ip address of machine running fedora
port = 5006
s.bind((host, port))

s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr
while True:
   c.send(raw_input("Server please type: "))
   print "From Client: ", c.recv(1024)

c.close()

原文由 SoreDakeNoKoto 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题