使用python套接字库与外部网络中的计算机进行对等连接



我正在尝试使用套接字库创建一个点对点python应用程序。我很想知道是否有任何方法可以使用套接字库连接到本地网络以外的另一台计算机,而无需任何手动步骤,例如在路由器上打开端口进行端口转发。我是否需要在路由器上使用已经打开的端口(假设路由器默认打开一些端口)?请引导我。我是socket和网络的新手。

我的代码到现在:-

client 1(发送方)

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((MYPUBLICIP, 433))
s.send(b"HELLO!")
s.close()

client 2 (receiver)

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((MYPRIVATEIP, 433))
s.listen()
conn, addr = s.accept()
with conn:
print(f"[CONNECTION_ALERT] Received connection request from {addr}.")
while True:
data = conn.recv(1026).decode('utf-8')
if not data:
break
print(data)

得到的错误:

ConnectionRefusedError: [WinError 10061]由于目标机器主动拒绝,无法建立连接

如果需要,我的python版本是10

连接同一局域网中的两台主机的解决方案

错误提示您的防火墙可能阻塞了网络流量,您可以尝试禁用防火墙并重试,但不建议这样做。如果你想玩网络的东西,我建议你创建一个没有连接到互联网的本地实验室,像VM或旧笔记本电脑/pc。

连接不在同一网络中的两台主机的解决方案

如果你想连接两台不在同一本地网络上的主机,那么问题就变得更复杂了,有几种可能的解决方案:

  • 向您的ISP询问公共IP(简单但通常需要额外费用)
  • 使用可用的软件解决方案在互联网上创建专用网络,如hamachi或ngrok(也很容易,但取决于用例成本会有所不同)
  • 通过使用STUN利用天真的NAT(很难实现,但如果做得对,很好地解释了它是如何在OpenTTD多人游戏中实现的)

最新更新