【问题标题】:How to connect to another PC through different networks如何通过不同的网络连接到另一台电脑
【发布时间】:2019-10-16 22:06:20
【问题描述】:

当我在我的 PC 上运行这两个代码时,它们都可以工作。但是,当我给我的朋友一个与我联系的代码时,它不起作用。都在不同的网络上。

我尝试在两者上都使用我的主机名。我也尝试使用我的本地 IP。

我使用的底部代码

import os
import socket


s = socket.socket()
port = 8079


s.bind(("My_Host_Name",port))
print("Scanning income connections")

s.listen(1)
conn, addr = s.accept()


print("Connected to:",addr)


while 1:
    #Sender
    command = input(str("Me: "))
    command = command.encode()
    conn.send(command)
    print("")



    #Reciever 
    data = conn.recv(1024)
    data = data.decode()
    print("Anonymous: "+data)
    print("")

最下面的是我送给朋友的那个

import os
import socket


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = "My_Host_Name"
port = 8079



s.connect((host,port))

while 1:
    #Reciever
    data = s.recv(1024)
    data = data.decode()
    print("Anonymous: " + data)
    print("")


    #Sender
    command = input(str("Me: "))
    command = command.encode()
    s.send(command)
    print("")

我希望它通过不同的网络连接

【问题讨论】:

    标签: python-3.x sockets networking


    【解决方案1】:

    为了让您的朋友连接,您的服务器应用程序需要 bind() 到它正在运行的 PC 的本地 LAN IP/端口,然后您的客户端应用程序需要 connect() 到公共 WAN IP/网络路由器的端口,而不是服务器的 LAN IP/端口。您的路由器需要配置为从 WAN IP/端口到服务器的 LAN IP/端口的端口转发连接。如果您的路由器支持 uPNP,您可以在服务器代码中以编程方式设置该转发,否则您必须在路由器的管理界面中手动配置它。

    【讨论】:

    • 好的,我现在明白了。但是,我对如何获得所有这些感到有些困惑。我确实从 ipconfig 找到了我的本地 LAN IP,这是我的 IPV4。然后我在路由器的管理界面中找到的端口和 WAN IP/端口?如果我确实获得了所有这些信息,我如何确保当我在我的代码中使用它时,我可以对其进行哈希处理,这样我的朋友就不会知道我的 WAN IP/端口。
    • 是的,在服务器 PC 上运行 ipconfig 将为您提供 LAN IP。您选择您希望服务器侦听的任何端口。将这些输入到路由器端口转发配置中。 WAN IP,您可以从路由器的配置中获取,也可以查询外部站点,例如https://www.whatismyip.com。 WAN 端口,由您选择。为什么要对朋友隐藏 WAN IP/端口?您的客户需要它们,将它们提供给您的朋友,以便他可以在他们的 PC 上将它们输入到客户端中。否则,将它们存储到(加密?)文件/字符串中以加载到客户端并在需要时对其进行解密。
    • 对于端口,我可以选择任何我想要的。这是否意味着我可以使用任何数字?如果是这样,我是否将这些相同的数字用于其他脚本供我的朋友使用。还是我的路由器或 PC 上用于访问 Internet 的特定端口?
    • @Mike 您的服务器可以侦听任何未使用或操作系统保留的端口号。与您的路由器转发相同。转发端口和监听端口不需要是同一个数字。但是无论你从哪个端口转发,那都是客户端需要连接的端口
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多