我正在尝试创建每个人都知道的常用基本聊天应用程序。 但有一个问题,即使在这里阅读了类似的问题并观看了 youtube 上的视频后,我意识到 Socket 模块就是为此而设计的。即使在尝试之后,我也找不到通过公共互联网进行通信的方法。这是我尝试过的:
在服务器和客户端上都使用我的公共IP,而不是本地IP
在客户端使用我的公共IP,0.0.0.0作为服务器
使用 ngrok 实例并使用其 ip 和端口,但 python 会说:
OSError:[WinError 10049] 地址在您的上下文中无效
感谢您的宝贵时间。 如果有人可以提供帮助,我将不胜感激示例代码
这个问题我自己经过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,不能这样保留。如果我在我的计算机上托管服务器,此代码不起作用。它会引发错误,但如果您可以修复,请回复,谢谢。