电子产业一站式赋能平台

PCB联盟网

搜索
查看: 792|回复: 0
收起左侧

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】九:远程TCP通信

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2021-1-11 09:57:41 | 显示全部楼层 |阅读模式
【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】九:远程TCP通信, 今天的帖子是关于如何让手机可以与wifiiot进行远程通信。通过远程的TCP中转服务端,让手机与板子进行可以进行远程数据传输。
一、数据传输过程 该过程与局域网内的TCP服务端与客户端数据传输过程很类似。局域网内是这样的,两个设备在同一个局域网内,一个作为TCP服务端,一个作为TCP客户端,这样这两个设备就是进行局域网内的数据通信。但是两个设备不在同一个网络内,数据传输在上面的方法是行不通的。这时可以借助一个在公网的TCP中转服务端,实现两个设备的远程数据传输。数据传输过程为两个设备都作为TCP客户端,一个设备把数据传输到服务端,然后服务端把数据传输到另一个设备。但是这也要求,这两个设备的网络是可以连接到公网的,否则是无法连接到公网的TCP服务端。
二、软件设计 首先我们需要一个在公网的TCP客户端。如果各位自己有云服务器的,可以自行搭建一个TCP中转服务端。我使用的客户端是别人用于测试的客户端。软件方面需要考虑几个问题:

  • 连接服务器的切换在我的上几个帖子上,需要连接其他服务器获取时间数据或者获取天气数据。这时,我们需要在进行连接服务器切换,确保获取的数据正常。  
  • 连接状态检测我们还需要进行连接状态检查,如果与TCP服务端断开,是无法正常进行数据交互的。  
  • 连接重连如果检查到连接断开,或者没有连接成功,需要重新尝试进行与服务端的连接。
      

1、TCP相关函数 新建tcp_connect.c tcp_connect.h文件,里面主要是与TCP连接、TCP连接断开、TCP数据发送、数据接收相关的函数。注意:TCPIPADDR、TCPPORT是公网TCP客户端IP地址和端口号。其实这几个函数是在之前的tcp例程中拆分出来的,把一个函数划分为四个函数而已。

  • 设置接收超时之前的例程中,没有加入接收超时机制,如果没有接收到数据,会一直呈现阻塞状态,其他任务可能会出现无法正常运行的状态,所以我们需要加入超时机制,超过一定时间没接收到数据,也会推出退出接收过程。timeval 在 <sys/time.h> 头文件中。//设置接收超时  struct timeval timeout={2,0};//1s  if (setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval)) == -1)  {      printf(“setsockopt faiLED!\r\n“);      //goto do_cleanup;  }  
  • tcp_connect.c
      


  • #include “tcp_connect.h“
      
  • //#define     TCPIPADDR       “192.168.3.9“
      
  • //#define     TCPPORT          5678
      
  • #define     TCPIPADDR       “115.29.109.104“
      
  • #define     TCPPORT          6545
      
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表