【问题标题】:How can i communicate beetween python scripts over the public internet?如何通过公共互联网在 python 脚本之间进行通信?
【发布时间】:2021-08-18 14:15:42
【问题描述】:

我正在尝试创建每个人都知道的常用基本聊天应用程序。 但是有一个问题,即使在这里阅读了类似的问题并在 youtube 上观看了视频之后,我意识到 Socket 模块就是为此而设计的。即使在尝试之后,我也找不到通过公共互联网进行通信的方法。这是我尝试过的:

  • 在服务器和客户端上使用我的公共 IP,而不是本地 IP

  • 在客户端使用我的公共 ip 和 0.0.0.0 作为服务器端

  • 使用 ngrok 的实例并使用它的 ip 和端口,但 python 会说:

    OSError: [WinError 10049] 地址在您的上下文中无效

感谢您的宝贵时间。 如果有人可以提供帮助,我将不胜感激示例代码

【问题讨论】:

  • 您是在正常的国内互联网连接上托管这些吗?您可能会发现您的家用路由器不允许您以脚本所需的方式侦听端口,除非您可以启用端口转发?当然,最简单的方法是将 API 用于现有的消息传递服务,例如电报。
  • @AriCooper-Davis 端口转发可能要花钱?无论如何,有这个网站pythonanywhere.com允许在云中托管和运行python代码(也是免费的(有限制obvs)),(可以制作一些基本的烧瓶应用程序进行通信,然后ping该服务器以获取更新和东西,或者也许可以那里也管理套接字,不太了解,只是它存在)
  • 对于我的 ISP,我可以在路由器本身上设置端口转发,无需再向 ISP 支付费用,但如果您想要静态 IP 通常会产生额外费用。很高兴在任何地方了解 python!
  • @Matiiss 抱歉,无法在云中托管我的服务器,需要在我的电脑上,因为外部原因太长,无法在此评论上写。
  • @giocoacose 您可以使用云作为您的计算机和另一台计算机之间的代理,所以基本上您的计算机首先发送到服务器,然后服务器发送到另一台计算机,例如信息在您的计算机上可以先发送到云端,然后另一台计算机可以 ping 服务器并获取信息

标签: python chat communicate


【解决方案1】:

经过 3 小时的搜索,我自己部分解决了这个问题。希望这可以成为如何做到这一点的一个很好的例子。我将 SERVER 实例托管在亚马逊 ec2 实例上,具体操作方法请继续阅读。

在 amazon aws 上,使用“Amazon Linux”映像创建一个 ec2 实例。 基本的、最低的、最坏的计划实际上就足够了。 2 个虚拟 CPU 和 0.5 GB 内存。创建后,在“安全组”部分添加以下入站规则:

“自定义 tcp”规则,在套接字代码中输入您希望使用的端口,并用作源“0.0.0.0/0”; 另一个自定义 tcp 规则,具有相同的端口,但来源为“::/0”;一个 SSH 规则,如果不存在的话,其来源为“0.0.0.0/0”。

在服务器中,编写如下代码:

IP = socket.gethostbyaddr('aws_instance_public_ip')[0]
PORT = 34758

s = socket.socket()
s.bind((IP, PORT))
s.listen()

在客户端,编写如下代码:

s = socket.socket()

IP = 'aws_instance_public_ip'
PORT = 34758

s.connect((IP, PORT))

注意事项: 我正在使用 python 3.7;您需要将 aws_instance_public_ip 替换为实例的实际 ip,不能​​这样。如果我将服务器托管在我的计算机中,则此代码不起作用。它会引发错误,但如果您可以修复,请回复,谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多