如何使用TCP

时间:2018-11-27 23:13:43

标签: python tcp wireless data-transfer

所以我想弄清楚如何在两个Pi Zero W单元之间发送字符串数据。我希望其中一位与我同在,其中一位与我的一位朋友在她家中。我真的很困惑这将如何工作。我在我的房屋中发现了一些似乎对这两个单元都适用的代码,但是将IP地址更改为朋友的公用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 个答案:

答案 0 :(得分: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,并且您无法运行自己的服务器应用程序,该应用程序会将其端口公开给互联网。