IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> QT通信-TCP通信 -> 正文阅读

[网络协议]QT通信-TCP通信

前言

通过QT的两个类(QTcpSocket)和(QTcpServer)来实现TCP通信。

这两个类属于Qt Network模块,所以先在项目文件中添加QT += network。
.pro

QT       += network

详细请见官网Qt Network 模块提供允许您编写 TCP/IP 客户端和服务器的类。它提供了代表低级网络概念的低级类,如QTcpSocket、QTcpServer和QUdpSocket,以及高级类如QNetworkRequest、QNetworkReply和QNetworkAccessManager以使用通用协议执行网络操作。它还提供了 QNetworkConfiguration、QNetworkConfigurationManager 和 QNetworkSession 等实现承载管理的类。

一、TCP服务端

第一种创建方式

在服务器应用程序中,创建一个QTcpServer类对象。调用QTcpServer::listen () 设置服务器,并连接到QTcpServer::newConnection () 信号,该信号每个新连接的客户端发出一次。并调用QTcpServer::nextPendingConnection () 接受连接并使用返回的QTcpSocket与客户端进行通信。

void MainWindow::my_TcpServer(int port)
{
	server = new QTcpServer(); //创建一个QTcpServer类对象
	server->listen(QHostAddress::Any, port); //监听
	connect(server,&QTcpServer::newConnection,this,&MainWindow::do_newConnect);
}
void MainWindow::do_newConnect()
{
    //获取客户端连接
    socket = server->nextPendingConnection();
}

第二种创建方式

基于QTcpServer类,创建一个子类,通过该写QTcpServer类中Protected Functions的虚函数
来实现一些自己想要的内容。
virtual void incomingConnection(qintptr socketDescriptor)
当新连接可用时,QTcpServer会调用此虚拟函数。该socketDescriptor参数是接受的连接本地套接字描述符。
基本实现创建一个QTcpSocket,设置套接字描述符,然后将QTcpSocket存储在挂起连接的内部列表中。最后发出newConnection ()。
重新实现此函数以在连接可用时更改服务器的行为。
在这里我们改写这个函数:

Server::Server(QObject *parent, int port):QTcpServer(parent)
{
    listen(QHostAddress::Any, port); //监听
}
void Server::incomingConnection(int socketDescriptor)
{
    //生成一个新的通信套接字
    TcpSocket *tcpsocket = new TcpClientSocket(this);
    //将新创建的通信套接字描述符指定为参数socketdescriptor
    tcpsocket->setSocketDescriptor(socketDescriptor);
    //将这个套接字加入客户端套接字列表中
    tcpsocketlist.append(tcpsocket);
    //将这个套接字添加到 Pending Connections 机制中。
    addPendingConnection (tcpsocket);
    /*
	需要添加的内容
	比如:接收数据和判断连接状态
	 //客户端发送数据过来就会触发readyRead信号
    connect(tcpsocket, &TcpSocket::readyRead, this, &Server::receivedata);
    //客户端断开连接触发disconnected信号
    connect(tcpsocket, &TcpSocket::disconnected, this, &Server::slotclientdisconnected);
	*/
 }
 void Server::sendDataToClient(QByteArray myData)
{
	if (!tcpsocketlist.empty()){
	//发送数据给客户端,从套接字列表中找到需要接收的套接字
	    for(int i = 0; i < tcpsocketlist.count(); i++)
	    {
	        QTcpSocket *item = tcpclientsocketlist.at(i);
	        item->write(myData);
	   }
	}
}

然后在主程序创建Server对象和绑定自己设置的信号就行

void MainWindow::init_tcp()
{
    my_server = new Server(this,9003);
    connect(my_server, &Server::update, this, &MainWindow::do_update);
}

二、TCP客户端

TCP客户端相对简单;
创建套接字
socket = new QTcpSocket();
连接服务器
socket->connectToHost(ip, port);
发送数据
socket->write(myData);

总结

具体程序见:https://download.csdn.net/download/qq_39641107/41320871
上面是我运用QT的TCP类,建立的TCP通信。
如有错误希望请大家指导,谢谢点赞!
希望和大家一起学习,交流!

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:06:46  更:2021-11-14 22:07:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:55:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码