Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何通过不同的网络连接到另一台电脑_Python 3.x_Sockets_Networking - Fatal编程技术网

Python 3.x 如何通过不同的网络连接到另一台电脑

Python 3.x 如何通过不同的网络连接到另一台电脑,python-3.x,sockets,networking,Python 3.x,Sockets,Networking,当我在电脑上运行这两个代码时,它们都可以工作。然而,当我给我的朋友一个与我连接的代码时,它不起作用。都在不同的网络上 我已经尝试在两个主机上使用我的主机名。我还尝试使用我的本地IP 我使用的底层代码 最后一个是我给我朋友的 我希望它能通过不同的网络连接为了让你的朋友能够连接,你的服务器应用程序需要绑定()到它运行的电脑的本地LAN IP/端口,然后你的客户端应用程序需要连接()到你网络路由器的公共WAN IP/端口,而不是服务器的LAN IP/端口。您的路由器需要配置为从WAN IP/端口到服务

当我在电脑上运行这两个代码时,它们都可以工作。然而,当我给我的朋友一个与我连接的代码时,它不起作用。都在不同的网络上

我已经尝试在两个主机上使用我的主机名。我还尝试使用我的本地IP

我使用的底层代码 最后一个是我给我朋友的
我希望它能通过不同的网络连接

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

好的,我现在明白了。然而,我有点困惑如何获得所有这些。我确实从ipconfig(我的IPV4)找到了我的本地LAN IP。然后,我在路由器的管理界面中找到的端口和WAN IP/端口?如果我确实获得了所有这些信息,我如何确保当我在代码中使用这些信息时,我可以对其进行哈希运算,这样我的朋友就不会知道我的WAN IP/端口。是的,在服务器PC上运行
ipconfig
将为您提供LAN IP。您可以选择服务器要侦听的任何端口。将这些输入路由器端口转发配置。WAN IP,您可以从路由器的配置中获取,也可以查询外部站点,如
https://www.whatismyip.com
。WAN端口,由您选择。为什么要对朋友隐藏WAN IP/端口?您的客户需要它们,请将它们交给您的朋友,以便他可以将它们输入到他们PC上的客户机中。否则,请将它们存储到(加密的?)文件/字符串中,以便加载到客户机中,并在需要时对其进行解密。对于端口as,我可以选择我想要的任何内容。这是否意味着我可以使用任何数字?如果是这样的话,我会将这些数字用于我的朋友使用的另一个脚本。或者是来自我的路由器或PC的专用端口,用于访问internet?@Mike您的服务器可以监听任何未使用的或操作系统保留的端口号。与路由器相同,用于转发。转发端口和侦听端口不需要是相同的号码。但无论从哪个端口转发,都是客户端需要连接的端口
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("")