如何使用 TCP 在两个独立房屋中的两个 Raspberry Pi 之间发送数据

How to send data between two Raspberry Pis in two separate houses using TCP

所以我想弄清楚如何在两个 Pi 零 W 单元之间发送字符串数据。我希望其中一个和我在一起,其中一个和我的一个朋友在她家里。我真的很困惑这将如何工作。我发现了一些似乎适用于我家两个单元的代码,但是在将 IP 地址更改为我朋友的 public IP 并尝试在她家使用它之后,没有任何结果。我对使用 Internet 协议还很陌生,因此我们将不胜感激。

Send.py

import sys
from socket import socket, AF_INET, SOCK_DGRAM

SERVER_IP   = ''
PORT_NUMBER = 5000
SIZE = 1024
print ("Test client sending packets to IP {0}, via port 
{1}\n".format(SERVER_IP, 
PORT_NUMBER))

mySocket = socket( AF_INET, SOCK_DGRAM )

while True:
    myMessage = input()
    mySocket.sendto(myMessage.encode('utf-8'),(SERVER_IP,PORT_NUMBER))
sys.exit()

Receive.py

#!/usr/bin/env python3

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 5000
SIZE = 128

hostName = gethostbyname( '0.0.0.0' )

mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.bind( (hostName, PORT_NUMBER) )

print ("Test server listening on port {0}\n".format(PORT_NUMBER))

while True:
    (data,addr) = mySocket.recvfrom(SIZE)
    print(data.decode('utf-8'))
sys.exit()

如果你想将它们连接在一起:

  1. 侦听传入 TCP 连接 (Receive.py) 的 RPI 必须在 RPI (https://raspberrypi.stackexchange.com/questions/69123/how-to-open-a-port)
  2. 上打开防火墙端口
  3. 必须在您的家庭路由器上打开将 RPI 连接到 ISP 的端口
  4. 您的 RPI 不能落后于提供商的 NAT 网络 - 有时,您可以从提供商那里购买静态 IP 地址,该地址不会更改,或者至少 public IP 地址会随时间动态变化。

您可以在路由器管理页面检查您是否落后于 NAT,检查路由器从 ISP 分配的 IP 是否与 Internet 上的服务器看到的 IP 地址相同。执行此查询:

https://www.google.com/search?q=what+is+my+ip+address)

如果它们相同,则说明您不在 ISP 的 NAT 后面,问题可能不存在。如果不同,您将与其他 ISP 的客户共享 IP,并且您不能 运行 您自己的服务器应用程序会将其端口公开到互联网。