迅为iTOP-i.MX6ULL开发板-网络通信-套字节TCP

发布时间:2021-6-18 10:52    发布者:落风
本章节使用的资料已经放到了开发板网盘资料中,路径为:“11_Linux 系统开发进阶\77_章节_网络通信-套字节 TCP 使用资料”。
iTOP-IMX6ULL 实现基于 TCP 的 socket 编程。
在 linux 下,网络资源非常丰富,底层的东西不需要去管,只需要知道怎么实现最终需要的功能即可。
77.1 实验操作
TCP 是一种面向连接的、可靠的、基于 IP 的传输层协议。通过 TCP 可以保证传送的数据的正确性。
Linux 下网络通信程序基本上都是采用 socket 的方式。socket 起源于 Unix,而 Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开 open->读写 read/write->关闭 close”模式来操作。Socket 就是该模式的一个实现,socket 即是一种特殊的文件,一些 socket 函数。就是对其进行的操作(读/写 IO、打开、关闭)。说白了 socket 是应用程序与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口。现在看一下基于 TCP/IP 应用程序通信的流程,如图 77.1.1。
1.jpg
通过上图可以看到 TCP/IP 通信是基于服务器/客户端的模式来实现的,首先是服务器(server)端调用socket 函数创建一个套接字,然后调用 bind 绑定函数,绑定函数主要是设置通信时使用哪种地址族(IPv4,IPv6 等),使用的端口号。然后调用 listen 函数来监听客户端的连接请求。
现在来看下客户端(client)端的流程,首先调用 socket 函数创建一个套接字,然后调用 connect 函数连接服务器,这时服务器端的 listen 函数监听到客户端的连接请求就会调用 accept 函数去接受请求,这样连接就建立好了。之后双方就可以调用 read/write 函数收发数据了,在完成通信以后服务器(server)和客
户端(client)调用 close 函数关闭创建的套接字。
下面来看一个实现 TCP/IP 的通信的例子,首先来看一下服务器(server)端的代码:
2.jpg
3.jpg
程序首先是包含一些需要用到的头文件,然后是 main 主函数,在 main 函数里面首先是定义了一些变量,然后调用 socket 函数创建一个套接字,socket 函数的第二个参数是 SOCK_STREAM,表示创建的是TCP 连接。然后调用 bzero 函数把变量 s_add 清零,然后给 s_add 结构里面的变量赋值:
4.jpg
然后调用 bind 绑定函数,使用的是 IPv4 协议族,然后调用 listen 监听函数,监听用户的连接请求。在监听到用户的请求后调用 accept 函数接受请求,然后进入到循环发送的代码,会循环发送“hello,welcometo my server”+发送次数号,最后会调用 close 关闭套接字。
下面来看看客户端(client)端的代码:
5.jpg
6.jpg
首先是包含一些需要的头文件,然后进入 main 主函数定义了一些变量,然后调用 socket 函数创建套接字,然后调用 bzero 函数把变量 s_add 清零,然后给 s_add 结构里面的变量赋值:
7.jpg
然后调用 connect 函数来连接服务器(server),在连接成功后,就进入了循环接收函数,使用 read 函数接收服务器发送的数据。最后会调用 close 函数关闭套接字。
下面来编译下这两个程序,服务器(server)的程序运行在虚拟机 Ubuntu 上,所以使用下面的命令编译:
gcc -o server server.c
这样就生成了 server 可执行文件,客户端(client)的程序运行在 iTOP-IMX6UL 开发板上,使用下面的命令编译:
arm-none-linux-gnueabi-gcc -o client client.c
这样就生成了 client 可执行程序,把 client 下载到 iTOP-IMX6UL 开发板上,现在开始运行这两个程序,首先在虚拟机 Ubuntu 上运行 serevr 程序,如图 77.1.2。
8.jpg
可以看到 server 打印出来的运行信息,现在 server 运行到了 listen 函数开始监听客户端的连接。下面在 iTOP-IMX6ULL 开发板上运行 client 程序(因为我把 client 下载到了/bin 目录下,所以先进入到/bin 目录)执行下面的命令:
./client 192.168.1.77
上面命令里面的 192.168.1.77 是虚拟机 Ubuntu 的 IP 地址,看到程序连接成功,首先看一下虚拟机Ubuntu 上的 server 打出的信息,如图 77.1.3。
9.jpg
可以看到上图中 server 打印出了客户端的 ip 地址和端口号“Server start get connectfrom 0xc0a801e6 :0xe171”。
然后看一下 iTOP-IMX6UL 开发板串口的打印信息,如图 77.1.4。
10.jpg
通过上图可以看到打印连接成功“connect ok !”,然后串口会一直打印
read ok
REC:
hello,welcome to my server(0)
至此,基于 TCP/IP 的 socket 网络编程就已经完成了。
11.jpg

本文地址:https://www.eechina.com/thread-768978-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • Dev Tool Bits——使用MPLAB® Discover浏览资源
  • Dev Tool Bits——使用条件软件断点宏来节省时间和空间
  • Dev Tool Bits——使用DVRT协议查看项目中的数据
  • Dev Tool Bits——使用MPLAB® Data Visualizer进行功率监视
  • 贸泽电子(Mouser)专区
关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表