为什么我的朋友不能连接到我的插座

时间:2020-06-28 10:27:55

标签: python-3.x sockets

所以我试图在我的朋友电脑和我的电脑之间建立连接,但一直说主机无法响应 这是客户

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

s.connect(("192.168.0.177", 1234))

msg = s.recv(1024)
print(msg.decode("utf-8"))

这是服务器

import socket
s = socket.socket(socket.AF_INET
, socket.SOCK_STREAM)
s.bind(('192.168.0.177', 1234))
s.listen(5)

while True:
    clientsocket, address = s.accept()
    print(f'conection from {address} has bene establish')
    clientsocket.send(bytes("welcome to the server", "utf-8"))

更新/编辑 所以我尝试了我的公共IP地址,它说 WinError 10049]请求的地址在其上下文中无效 错误是在服务器端

2 个答案:

答案 0 :(得分:1)

在评论中,您说您的朋友和您在不同的LAN上。他无法访问您的服务器的原因是因为他试图通过连接到192.168.x.x中的地址(192.168.0.177)来访问您的服务器on your LAN。空格from his LAN

请参见https://en.wikipedia.org/wiki/Private_network,其中解释了192.168.0.0 – 192.168.255.255范围内的地址是为专用网络保留的。因此,IP packets originating from or addressed to a private IP address cannot be routed through the public Internet

要解决此问题,您应该设置路由器port-forwarding规则,以将传入连接转发到路由器public侧的端口1234到{{1上的192.168.0.177:1234 }}。然后,您的朋友应该连接到xxx.xxx.xxx.xxx:1234,其中xxx.xxx.xxx.xxx是路由器的private IP地址。通过将网络浏览器从LAN上的计算机指向www.whatismyip.com,可以找到路由器的公共IP地址。如果端口转发正常,则路由器应将来自您朋友的传入连接转发到运行在专用LAN上的192.168.0.177:1234服务器。

答案 1 :(得分:0)

IP范围192.168.0.0192.168.255.255(192.168.0.0/16)被认为是私有范围。即使您设计路由器将这些来源的数据包强制发送到外部互联网世界,其他路由器也会丢弃这些数据包。

您需要将两台计算机都放在同一个LAN上,或者您需要自己建立一个网络并在它们之间配置路由器(路由表),或者配置一个用于接受连接的公共IP。