【FFH】OpenHarmony设备开发(二)-基于TCP遥控小车 原创 精华
X丶昕雪
发布于 2022-9-3 00:50
浏览
3收藏
基于TCP开发遥控小车
本文主要介绍在hi3861使用TCP进行控制小车,在使用TCP遥控小车之前,需要连接好wifi,连接wifi的步骤可以参考此文章: OpenHarmony设备开发-WIFI连接。
TCP传输控制协议,是一种提供可靠的数据传输的协议,是有连接的,按序传输数据的,面向字节流的,可靠稳定的协议.
TCP通讯设备分为了客户端和服务端,在本文中,在windows上建立服务端,hi3861作为客户端,两者连接手机的wifi进行TCP通讯(一定要在同一网络内)。下文主要介绍hi3861作为客户端建立tcp连接的方法.
客户端代码介绍
- 客户端在连接TCP之前一定要确保连上wifi,而hi3861连接wifi需要亿点点时间,因此建议连接wifi后
sleep()
几秒钟,让hi3861连接上wifi.
- 首先创建Socket对象,创建客户端套接字对象
- socket()本次只需要关注参数一和参数二,参数一表示ipv4,参数二表示使用面向连接的套接字(TCP)
- 返回值:若创建失败,返回-1
- 创建
sockaddr_in
结构体对象,该对象存放服务端地址的参数,并初始化该对象的成员
connect()
连接函数,其功能是完成一个有连接协议的连接过程.上面两步创建的结构体对象都会在这一步使用到,这一步也是TCP连接最为关键的一步- 返回值:若连接成功便返回0,失败则返回-1
- 参数一:指定数据发送的套接字
- 参数二:指定服务端的地址,使用
sockaddr_in
结构体对象 - 参数三:参数二结构体的长度
connect(socks, (struct sockaddr *)&sock_addr, sizeof(sock_addr));
上述步骤便完成了hi3861客户端和服务端的连接,我们接下来便可以快乐地和服务端进行收发数据,基于该无线连接的收发数据,我们可以做出各种有意思有趣的东西.
- API接口
- 发送数据:
函数:lwip_write(int s, const void *dataptr, size_t size);
参数一:套接字对象,参数二:发送的数据,参数三:数据长度
样例:
- 接收数据:
函数:lwip_read(int fildes, void *buf, size_t nbyte);
参数一:套接字对象,参数二:接收的数据,参数三:数据长度
样例:
- 超时机制:
在TCP连接中,recv等函数默认为阻塞模式,就是没有数据传输时便会一直停留在函数里,我们有时不希望一直停在这个函数内,便需要一种超时机制setsockopt()
,到达一定时间后即使没有数据也会退出函数.
函数:int setsockopt(int s, int level, int optname, void* optval, socklen_t* optlen);
-
参数一: 指向一个打开的套接口描述字
-
参数二:指定选项代码的类型
|选项代码的类型|含义|
| ---- | ---- |
|SOL_SOCKET| 基本套接口|
|IPPROTO_IP| IPv4套接口|
|IPPROTO_IPV6|IPv6套接口|
|IPPROTO_TCP|TCP套接口| -
参数三:选项名称
SO_RCVTIMEO:设置接收超时时间 -
参数四:选项值
-
参数五:参数的长度
样例:
-
该函数还有其它许多用法,但本文不过多介绍,需要了解更多可以baidu一下
关键代码
头文件以及一些宏定义:
主函数中的代码:
小车控制的代码:
win10中的服务端:
编译gcc -o server server.c -lwsock32
运行软件./server IP地址 端口
效果图
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
赞
4
收藏 3
回复
4
6
3
相关推荐
大佬666!
好奇hi3861连wifi遇到了啥困苦,单纯的网络难连接吗?
代码躺在附件和自己电脑,都是很浪费的。
建议研究下提交到OpenHarmony的知识体系代码仓里。
怎么参加代码提交,可以去翻一下“战码先锋”相关回播,一大堆课程在做讲解。
有道理
感谢提示
网络不难连接,我们的设备连接wifi时后的一小段时间才真正连上,我认为是wifi连接中的关联步骤需要一些时间