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

QT tcp通信

QT tcp通信

TcpTest.pro

QT       += core gui networkCONFIG += C++11

main.cpp

#include "serverwidget.h"
#include <QApplication>#include "clientwidget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);ServerWidget w;w.show();ClientWidget w2;w2.show();return a.exec();
}

serverwidget.h

#include <QTcpServer>  // 监听套接字
#include <QTcpSocket>  // 通信套接字private slots:void on_pushButtonsend_clicked();void on_pushButton_2close_clicked();private:QTcpServer *tcpServer; // 监听套接字QTcpSocket *tcpSocket; // 通信套接字};

serverwidget.cpp

#include "serverwidget.h"
#include "ui_serverwidget.h"
#include <QDebug>ServerWidget::ServerWidget(QWidget *parent) :QWidget(parent),ui(new Ui::ServerWidget)
{ui->setupUi(this);tcpServer = NULL;tcpSocket = NULL;// 监听套接字,指定父对象让其自动回收空间tcpServer = new QTcpServer(this);tcpServer->listen(QHostAddress::Any, 8888);setWindowTitle("服务器: 8888");connect(tcpServer, &QTcpServer::newConnection, [=](){// 取出建立好连接的套接字tcpSocket = tcpServer->nextPendingConnection();// 获取对方的ip和端口QString ip = tcpSocket->peerAddress().toString();// qint16 port = tcpSocket->peerPort();quint16 port = tcpSocket->peerPort();// qDebug() << port;QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port);ui->textEdit->setText(temp);connect(tcpSocket, &QTcpSocket::readyRead, [=](){// 从通信套接字中取出内容QByteArray array = tcpSocket->readAll();ui->textEdit->append(array);});});}ServerWidget::~ServerWidget()
{delete ui;
}void ServerWidget::on_pushButtonsend_clicked()
{if(NULL == tcpSocket){return;}// 获取编辑区内容QString str = ui->textEdit_2->toPlainText();// 给对方发送数据 使用套接字是tcpSockettcpSocket->write( str.toUtf8().data() );}void ServerWidget::on_pushButton_2close_clicked()
{if(NULL == tcpSocket){return;}// 主动和客户端断开连接tcpSocket->disconnectFromHost();tcpSocket->close();tcpSocket = NULL;
}

clientwidget.h

#include <QTcpSocket> // 通信套接字private slots:void on_pushButtonconn_clicked();void on_pushButton_2send_clicked();void on_pushButton_3close_clicked();private:QTcpSocket *tcpsocket; // 通信套接字

clientwidget.cpp

#include "clientwidget.h"
#include "ui_clientwidget.h"#include <QHostAddress>ClientWidget::ClientWidget(QWidget *parent) :QWidget(parent),ui(new Ui::ClientWidget)
{ui->setupUi(this);tcpsocket = NULL;// 分配空间,指定父对象tcpsocket = new QTcpSocket(this);setWindowTitle("客户端");connect(tcpsocket, &QTcpSocket::connected, [=](){ui->textEdit->setText("成功和服务器建立好连接");});connect(tcpsocket, &QTcpSocket::readyRead, [=](){// 获取对方发送的内容 从通信套接字中取出内容QByteArray array = tcpsocket->readAll();// 追加到编辑区中ui->textEdit->append(array);});}ClientWidget::~ClientWidget()
{delete ui;
}void ClientWidget::on_pushButtonconn_clicked()
{// 获取服务器ip和端口QString ip = ui->lineEdit_2IP->text();quint16 port = ui->lineEditport->text().toInt();// 主动和服务器建立连接tcpsocket->connectToHost(QHostAddress(ip), port);}void ClientWidget::on_pushButton_2send_clicked()
{// 获取编辑框内容QString str = ui->textEdit_2->toPlainText();// 发送数据tcpsocket->write( str.toUtf8().data() );
}void ClientWidget::on_pushButton_3close_clicked()
{// 主动和对方断开连接tcpsocket->disconnectFromHost();tcpsocket->close();}

serverwidget.ui

clientwidget.ui

相关文章:

  • 共享wifi项目如何加盟,都有哪些注意事项?
  • JDK22新特性Class-File API尝鲜
  • 1.3 卷积层的输出尺寸、参数量和计算量
  • VUE3项目学习系列--项目配置(二)
  • 行人实时动作识别
  • Maven能解决什么问题?为什么要用?
  • STM32(15)USART编程
  • 红黑树的简单介绍
  • 第十七天-反爬与反反爬-验证码识别
  • [HackMyVM]靶场 Quick3
  • 【学习心得】网站运行时间轴(爬虫逆向)
  • C# Winform画图绘制圆形
  • c 函数 memset使用注意事项
  • Spring中最常用的11个扩展点
  • Vue+SpringBoot打造超市账单管理系统
  • __proto__ 和 prototype的关系
  • CSS 专业技巧
  • Javascript设计模式学习之Observer(观察者)模式
  • Java精华积累:初学者都应该搞懂的问题
  • js继承的实现方法
  • Laravel5.4 Queues队列学习
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • 给初学者:JavaScript 中数组操作注意点
  • 给第三方使用接口的 URL 签名实现
  • 记录:CentOS7.2配置LNMP环境记录
  • 马上搞懂 GeoJSON
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 数据结构java版之冒泡排序及优化
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ![CDATA[ ]] 是什么东东
  • #QT(TCP网络编程-服务端)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二十三)Flask之高频面试点
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)JAVA中的堆栈
  • (转载)Linux网络编程入门
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 表达式计算:Expression Evaluator
  • .NET 中创建支持集合初始化器的类型
  • .so文件(linux系统)
  • [ solr入门 ] - 利用solrJ进行检索
  • [1]-基于图搜索的路径规划基础
  • [ASP]青辰网络考试管理系统NES X3.5
  • [C/C++] C/C++中数字与字符串之间的转换
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [COI2007] Sabor
  • [Head First设计模式]策略模式