Qt基于网络TCP的学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Qt 学习TCP通讯

一、TCP所使用的类

QTcpServer类和QTcpSocket类,QTcpServer类是为了创建一个服务器用于端口监听;QTcpSocket类用于建立后使用套接字通讯。

二、使用步骤

1.引入头文件

代码如下(示例):

#include <QHostInfo>
#include <QHostAddress>
#include <QtNetwork>
#include <QTcpServer>

2.创建服务器并开启监听

首先要获取自己主机或者服务器的IP,如果自己主机的话可以是常量QHostAddress::LocalHost,端口可以自己指定;

tcpServer = new QTcpServer;
QHostAddress add(IP);	   //IP是string类型
tcpServer.listen(add,port);//其中add是QHostAddress类型

3.监听后获取socket通讯并且关联事件

QTcpSocket= tcpServer ->nextPendingConnection();	//获取一个等待的连接
//利用槽函数将socket产生连接的状态与自己写的事件相关联进行一些事情处理 
connect(tcpServer ,&QAbsractSocket::newConnected,this,&Client::onConnected);
//该connect函数中使用了QOverload类,该类返回值了一个指向特定重载函数的指针,否则在使用函数地址传递的时候找不到特定的函数
connect(tcpSocket,QOverload<QAbstractSocket::SocketState>::of(&QAbstractSocket::stateChanged),this,&Client::onSocketStateChange);

4.接受发送数据

基于行的数据通讯,只适用于纯文本通讯,每一行以一个换行符结束
发送数据:

	QString msg;
	QByteArry str=msg.toUtf8();
	str.append('\n');
	QTcpSocket->write(str);

接受数据与发送数据不同,是需要以槽的形式将tcpSocket的readyRead与自己写的事件关联起来:

	connect(tcpSocket,&QAbstractSocket::readyRead,this,&Client::onSocketReadyRead);

接受数据:

	QString msg;
	while(tcpSocket->canReadLine())
		msg=tcpSocket->ReadLine();

这样只要在读取缓冲区中还有数据并且可以读取就会一直读取数据;

总结

以上为学习TCP通讯的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值