【问题标题】:How to send data between two Raspberry Pis in two separate houses using TCP如何使用 TCP 在两个独立房屋中的两个 Raspberry Pi 之间发送数据
【发布时间】:2018-11-27 23:13:43
【问题描述】:

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

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()

【问题讨论】:

  • 你在你/你朋友的路由器上做过端口转发吗?
  • 在尝试弄乱 UDP 之前,您可能应该彻底了解 TCP。这要复杂得多。
  • @FamousJameous 我确实在我的但不是她的上设置了端口转发。
  • 您的问题涉及 TCP,但您的代码请求 UDP 套接字。
  • @DavidSchwartz 就像我说的我对这些东西很陌生,我真的不知道我可以去哪里研究它

标签: python tcp wireless data-transfer


【解决方案1】:

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

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

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

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

如果它们相同,则说明您不在 ISP 的 NAT 后面,问题可能不存在。如果不同,您将与其他 ISP 的客户共享 IP,并且您无法运行自己的服务器应用程序,该应用程序会将其端口暴露给 Internet。

【讨论】:

  • 谢谢!所以我不在我的 ISP 的 NAT 下。我可以看到我的公共 IP,它与我的路由器相同。但是我朋友的IP在她的ISP的NAT下。所以我猜这种方式行不通。无论如何,我可以在我们之间发送不需要我们俩都不在我们的 ISP 的 NAT 下的数据吗?或者我可以通过哪些方式进行设置?
  • 你可以在家里运行socket服务器,然后朋友的RPI会连接到你的,因为你可以从NAT网络内部发起TCP流没有问题。
  • 好的,谢谢。我会调查的。就像我说的那样,我对此很陌生,所以谢谢
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2020-10-16
  • 2015-09-18
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多