【问题标题】:How to let client application outside your netowrk connect to your server如何让网络外的客户端应用程序连接到您的服务器
【发布时间】:2020-11-20 06:17:38
【问题描述】:

我是套接字编程的新手。我开发了客户端成功与服务器通信的基本/简单客户端和服务器应用程序。目前,服务器都在我的系统(本地主机)上,客户端也是我的系统。

现在我想以某种方式允许网络外部的客户端(我的系统所属的网络)与服务器通信,但我不知道该做什么以及如何继续。任何帮助将不胜感激。

这是取自here的示例代码

server.py

enter code here
import socket                

# next create a socket object 
s = socket.socket()          
print "Socket successfully created"
port = 12345                
s.bind(('', port))         
print "socket binded to %s" %(port) 
s.listen(5)      
print "socket is listening"            
while True: 

  # Establish connection with client. 
  c, addr = s.accept()      
  print 'Got connection from', addr 
  c.send('Thank you for connecting') 
  c.close() 

client.py

  import socket                 
   s = socket.socket()          
   port = 12345                 
   s.connect(('127.0.0.1', port)) 
   print s.recv(1024) 
   s.close() 

【问题讨论】:

    标签: sockets networking


    【解决方案1】:

    除了客户端连接的 IP 之外,您实际上不需要更改代码中的任何内容。需要是服务器PC的公网IP,而不是127.0.0.1

    如果服务器 PC 直接连接到 Internet 调制解调器,那么您就完成了。

    否则,如果服务器 PC 位于路由器或代理后面,那么您需要在该路由器/代理上配置 端口转发,以将流量从其公共 WAN IP/端口转发到服务器 PC 的 LAN IP/端口。请查阅您的路由器/代理的文档以了解如何进行该配置。

    如果路由器/代理启用了 uPNP,您的服务器代码可以在运行时动态地将 WAN IP/端口转发给它自己。见Python: Open a Listening Port Behind a Router (upnp?)

    【讨论】:

    • 嘿,感谢您的快速回复,您说的很有道理,但我害怕弄乱我的路由器设置。我的路由器中有 Upnp 设置选项,如果我启用它,路由器会自动允许网络外的客户端应用程序连接到我的服务器吗?
    • @blacksheep369 通过在路由器上配置端口转发,您不会弄乱路由器中的任何东西。但是,如果启用了 uPnp,路由器将不会自动允许客户端连接到服务器,这不是 uPnp 所做的,但它会允许您的服务器代码使用 uPNP 协议来设置端口在运行时动态转发,即在打开监听端口之后进入接受循环之前。这样您就不必手动进入路由器设置。
    • 嘿,非常感谢!这似乎可行,但我想知道后一种方法如何工作(在路由器中启用 upnp,然后更新代码)。如果您能向我指出有关此的任何文章或教程,那将有很大帮助!再次感谢您的帮助
    • 是的,我试过 tis 但不幸的是 miniupnpc lib 似乎缺少一些模块,因为在 pip 安装库时出现错误
    • @blacksheep369 那么你只需要找到另一个实现。或者自己写。 概念是一样的,你只需要一个工作的实现。我帮不了你。
    猜你喜欢
    • 2018-11-21
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    相关资源
    最近更新 更多