我如何通过公共互联网在Python脚本之间进行通信?

问题描述 投票:0回答:1

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

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

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

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

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

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

python network-programming chat
1个回答
0
投票

这个问题我自己经过3个小时的搜索得到了部分解决。希望这可以成为一个很好的例子来说明如何做到这一点。我在亚马逊 ec2 实例上托管 SERVER 实例,有关如何准确执行此操作的信息,请继续阅读。

在 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,不能这样保留。如果我在我的计算机上托管服务器,此代码不起作用。它会引发错误,但如果您可以修复,请回复,谢谢。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.