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

QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)

 QT实现tcpf服务器代码:(源文件)

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//给服务器指针实例化空间server = new QTcpServer(this);
}Widget::~Widget()
{delete ui;
}//启动服务器按钮对应的槽函数
void Widget::on_startBtn_clicked()
{//获取ui界面上的端口quint16 port = ui->portEdit->text().toInt();//将服务器设置成监听状态if(server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"","服务器启动成功");}else{QMessageBox::information(this,"","服务器启动失败");}//此时服务器已经进入监听状态,如果有客户端发来连接请求,那么该服务器就会自动发射一个newConnection信号//我们可以将该信号连接到自定义的槽函数中处理新连接的套接字connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}void Widget::newConnection_slot()
{qDebug()<<"有新客户连接";//获取最新连接的客户端套接字QTcpSocket *s=server->nextPendingConnection();//将该套接字放入到客户端容器中socketlist.push_back(s);//此时,客户端与服务器已经建立起来连接//如果有客户端向服务器发来数据,那么该客户端会自动发射一个readyRead信号//我们可以在该信号对应的槽函数中,读取客户端中的数据connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}
void Widget::readyRead_slot()
{//移除无效客户端for(int i=0;i<socketlist.count();i++){if(socketlist.at(i)->state()==0){socketlist.removeAt(i);}}//遍历客户端套接字,寻找是哪个客户端有数据待读for(int i=0;i<socketlist.count();i++){//判断当前套接字是否有数据待读if(socketlist.at(i)->bytesAvailable()!=0){//读取套接字中的所有数据QByteArray msg = socketlist.at(i)->readAll();//将数据展示到ui界面ui->listWidget->addItem(QString::fromLocal8Bit(msg));//将数据发送给所有客户端for(int j=0;j<socketlist.count();j++){//将数据写入到所有客户端套接字中socketlist.at(j)->write(msg);}}}
}

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMessageBox>
#include <QDebug>
#include <QList>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startBtn_clicked();void newConnection_slot();void readyRead_slot();private:Ui::Widget *ui;QTcpServer *server;QList<QTcpSocket *> socketlist;
};
#endif // WIDGET_H

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

相关文章:

  • hjm家族信托科技研究报告
  • [SQL挖掘机] - 视图相关操作
  • 【Quartus FPGA】EMIF DDR3 读写带宽测试
  • Flutter:flutter_local_notifications——消息推送的学习
  • Spring AOP (面向切面编程)原理与代理模式—实例演示
  • 什么是SCRUM认证体系 ?
  • DoIP学习笔记系列:(二)VN5620 DoIP测试配置实践笔记
  • Grafana - TDEngine搭建数据监测报警系统
  • ES6基础知识二:ES6中数组新增了哪些扩展?
  • 使用CRM分析数据有哪些功能?
  • 大数据课程综合实验案例---课设问题汇总
  • 基于Vue+Element Plus实现表格组件
  • MYSQL 主从复制
  • 网络安全领域关键信息泄露事件引发关注
  • AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明
  • 夯实数字化转型安全地基,华东某农商行开源安全治理经验
  • 第G3周:CGAN|生成手势图像
  • wireshark导出H264裸流
  • Sentinel针对IP限流
  • S475支持 ModbusRTU 转 MQTT协议采集网关
  • js的变量
  • MicroPython for ESP32
  • 选择适合产品需求管理的项目管理系统,打造完美项目流程!
  • @monaco-editor/react组件CDN加载失败解决办法
  • java对象的强引用,弱引用,软引用,虚引用
  • ubuntu ssh
  • js:斐波那契额数列生成器Generator
  • 行列转换.
  • CentOs 7利用iscaiadm工具发现并连接外接存储
  • Java期末复习基础题编程题