ARM开发板基于tcp通信项目实战 2:项目总结(linux下tcp编程和qt下tcp编程的对比分析)

1、TCP编程需要用到两个类:

1.1 QtcpServer和QtcpSocket.
TCP分为客户端和服务端。客户端用到QtcpSocket类;服务端用到了QtcpServer和QtcpSocket类。
1.2、在编程之前,我们先了解一下这两个类的作用:
QTcpServer:监听套接字,用于监听是否有客户端的连接。
QTcpSocket:通信套接字,用于实现数据的收发,属于设备IO类。
扩展:在QT中,提供IO设备类,这些设备具有读写子块的能力,提供了读写子块的接口:
在这里插入图片描述

2、linux下的tcp通信

2.1 流程图:

在这里插入图片描述
2.2 文字描述:
在linux下,会使用三个套接字。服务器两个(监听套接字和通信套接字),客户端一个(通信套接字)。
1)、服务器的监听套接字,这个套接字的意义是:通过bind()函数,给这个套接字绑定IP和端口号(服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号。);
2)、通过listent()函数设置服务器同时监听的上限;
3)、accpet()函数,需要调用上面的套接字信息;然后就处于等待状态,直到客户端与服务端建立成功连接以后,accpet()函数会产生一个新的套接字(通信套接字),这个套接字用来和客户端之间的套接字连接、通信。上面的套接字就被释放出来,用来准备下一次的连接。
2.3 具体的流程如下:
server:

1. socket()	创建socket
2. bind()	绑定服务器地址结构
3. listen()	设置监听上限
4. accept()	阻塞监听客户端连接
5. read(fd)	读socket获取客户端数据
6.--大写	toupper()
7. write(fd)
8. close();
client:
1. socket()	创建socket
2. connect();	与服务器建立连接
3. write()	写数据到 socket
4. read()	读转换后的数据。
5. 显示读取结果
6. close()

在QT的tcp编程中,整个过程简单很多:

3、QT下的tcp通信

3.1、流程图:
在这里插入图片描述
3.2 文字注释:
在QT中,同样会使用三个套接字。服务器两个(监听套接字和通信套接字),客户端一个(通信套接字)。
1)、服务器首先创建一个监听套接字。
2)、当监听套接字接受到客户端的连接,会自动触发newconnect()信号,在对应的槽函数中,产生通信套接字。
3)、如果是数据传送成功,对方的通信套接字会触发readyread()信号,需要在自己的槽函数中做,接受信号的处理。

4、二者不一样的地方:

1)、关于IP和端口号
linux下,在使用bind()函数绑定地址结构的时候,要注意IP和端口号的转化。
网络字节序采用的是大端法;本地字节序采用的是小端法。
因此,我们需要将本地字节序转化为网络字节序;
在QT中,我们直接使用listen函数,以小端法的方式直接输入IP和端口号即可。
2)、函数的区别

//实例化一个就按听套接字  对应linux下的socket()
tcpServer = new QTcpServer(this);
//监听来自客户端的连接    对应linux下的bind()和listen()
tcpServer->listen(QHostAddress::Any,ui->portEdit->text().toUInt());
/*接收来自客户端的通信套接字对象(tcpSocket是通信套接字)    
对应linux下的accept()   */
tcpSocket = tcpServer->nextPendingConnection();

5、总结:

这个工程只是简单地描述了基于TCP建立通信和数据收发的简单过程。 在真正的TCP在网络应用程序中,还需要处理很多突发的网络情况。如:连接过程中的错误处理,心跳包机制, 服务端强行断开连接后客户端的处理,数据粘包与断包,数据接收队列,等等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One Piece&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值