当前位置: 首页 > news >正文

Qt TCP/IP网络通信

TCP服务器部分:

创建TCP服务器:
#include    <QTcpServer>
QTcpServer *tcpServer; //TCP服务器
tcpServer=new QTcpServer(this);TCP服务器来连接的信号与槽:
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection()));创建TCP套接字:
QTcpSocket *tcpSocket;//TCP通讯的Socket
在槽函数中:
void MainWindow::onNewConnection()
{
//    ui->plainTextEdit->appendPlainText("有新连接");tcpSocket = tcpServer->nextPendingConnection(); //创建socketconnect(tcpSocket, SIGNAL(connected()),this, SLOT(onClientConnected()));onClientConnected();//connect(tcpSocket, SIGNAL(disconnected()),this, SLOT(onClientDisconnected()));connect(tcpSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(onSocketStateChange(QAbstractSocket::SocketState)));onSocketStateChange(tcpSocket->state());connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(onSocketReadyRead()));
}相关槽函数:
void MainWindow::onClientConnected()
{//客户端接入时ui->plainTextEdit->appendPlainText("**client socket connected");ui->plainTextEdit->appendPlainText("**peer address:"+tcpSocket->peerAddress().toString());ui->plainTextEdit->appendPlainText("**peer port:"+QString::number(tcpSocket->peerPort()));
}void MainWindow::onClientDisconnected()
{//客户端断开连接时ui->plainTextEdit->appendPlainText("**client socket disconnected");tcpSocket->deleteLater();//    deleteLater();//QObject::deleteLater();
}void MainWindow::onSocketStateChange(QAbstractSocket::SocketState socketState)
{//socket状态变化时switch(socketState){case QAbstractSocket::UnconnectedState:LabSocketState->setText("scoket状态:UnconnectedState");break;case QAbstractSocket::HostLookupState:LabSocketState->setText("scoket状态:HostLookupState");break;case QAbstractSocket::ConnectingState:LabSocketState->setText("scoket状态:ConnectingState");break;case QAbstractSocket::ConnectedState:LabSocketState->setText("scoket状态:ConnectedState");break;case QAbstractSocket::BoundState:LabSocketState->setText("scoket状态:BoundState");break;case QAbstractSocket::ClosingState:LabSocketState->setText("scoket状态:ClosingState");break;case QAbstractSocket::ListeningState:LabSocketState->setText("scoket状态:ListeningState");}
}void MainWindow::onSocketReadyRead()
{//读取缓冲区行文本
//    QStringList   lines;while(tcpSocket->canReadLine())ui->plainTextEdit->appendPlainText("[in] "+tcpSocket->readLine());
//        lines.append(clientConnection->readLine());
}服务器开始监听:
tcpServer->listen(addr,port);//
停止监听:
if (tcpServer->isListening()) //tcpServer正在监听{tcpServer->close();//停止监听
}发送数据:
void MainWindow::on_btnSend_clicked()
{//发送一行字符串,以换行符结束QString  msg=ui->editMsg->text();ui->plainTextEdit->appendPlainText("[out] "+msg);ui->editMsg->clear();ui->editMsg->setFocus();QByteArray  str=msg.toUtf8();str.append('\n');//添加一个换行符tcpSocket->write(str);
}

TCP客户端部分:

#include    <QTcpSocket>
创建TCP套接字:
QTcpSocket  *tcpClient;  
tcpClient=new QTcpSocket(this); //创建socket变量
连接相关信号与槽:
connect(tcpClient,SIGNAL(connected()),this,SLOT(onConnected()));connect(tcpClient,SIGNAL(disconnected()),this,SLOT(onDisconnected()));connect(tcpClient,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this,SLOT(onSocketStateChange(QAbstractSocket::SocketState)));connect(tcpClient,SIGNAL(readyRead()),this,SLOT(onSocketReadyRead()));void MainWindow::onSocketReadyRead()
{//readyRead()信号槽函数while(tcpClient->canReadLine())ui->plainTextEdit->appendPlainText("[in] "+tcpClient->readLine());
}
连接到服务器:
tcpClient->connectToHost(addr,port);
断开连接:
if (tcpClient->state()==QAbstractSocket::ConnectedState)tcpClient->disconnectFromHost();
发送数据:
void MainWindow::on_btnSend_clicked()
{//发送数据QString  msg=ui->editMsg->text();ui->plainTextEdit->appendPlainText("[out] "+msg);ui->editMsg->clear();ui->editMsg->setFocus();QByteArray  str=msg.toUtf8();str.append('\n');tcpClient->write(str);
}

http://www.lryc.cn/news/226948.html

相关文章:

  • 全域旅游“一机游”智慧旅游平台解决方案:PPT全文48页,附下载
  • Ubuntu 22.04 (WSL2) 安装 libssl1.1
  • Unity 跑酷游戏全部脚本(完结)
  • 凯美瑞 vs 太空船:Web3 游戏生长的两条路径
  • (一)正点原子I.MX6ULL kernel6.1移植
  • 计算机服务器中了mallox勒索病毒怎么解决,勒索病毒解密,数据恢复
  • CSS3实现动态旋转加载样式
  • 【LeetCode刷题-二分查找】--658.找到K个最接近的元素
  • 新方向!文心一言X具身智能,用LLM大模型驱动智能小车
  • mysql.sock找不到怎么解决?
  • 微信小程序刷新当前页面(亲测有效)
  • 通过拉普拉斯特征映射降维
  • 【信息安全原理】——传输层安全(学习笔记)
  • GBDT减少模型偏差、随机森林减小模型方差
  • 使用IDEA工具处理git合并后的冲突的细节
  • 快速下载ChatGLM系列模型
  • 【数据结构】顺序表 | 详细讲解
  • 100天精通风控建模(原理+Python实现)——第1天:什么是风控建模?
  • HTML转义字符
  • 【STM32】
  • U盘不可以访问的维护
  • SpringCloud 微服务全栈体系(十三)
  • ROC 曲线详解
  • 113.路径总和II
  • 【Linux】WSL安装Kali及基本操作
  • Linux基础开发工具之调试器gdb
  • Apache APISIX 的 Admin API 默认访问令牌漏洞(CVE-2020-13945)漏洞复现
  • Clickhouse学习笔记(3)—— Clickhouse表引擎
  • WebSocket是什么以及其与HTTP的区别
  • Flutter 实战:构建跨平台应用