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

C++ day5

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), server(new QTcpServer(this)) // 实例化服务器对象
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_startButton_clicked()
{// 获取界面输入的端口号quint16 port = ui->PortLineEdit->text().toUInt();// 设置服务器为监听状态: 监听任意客户端(主机)int ret = server->listen(QHostAddress::Any, port);if(ret == true){QMessageBox::information(this, "", "启动服务器成功");}else{QMessageBox::information(this, "", "启动服务器失败");return;}// 新客户端连接信号 连接 槽函数connect(server, &QTcpServer::newConnection, this, &Widget::connectSlot);
}void Widget::connectSlot()
{// 获取新连接客户端的socketQTcpSocket *clientSocket = server->nextPendingConnection();// 将客户端socket对象存入链表中socketList.push_back(clientSocket);// 客户端发送数据信号 连接 窗口connect(clientSocket, &QTcpSocket::readyRead, this, &Widget::readySlot);
}void Widget::readySlot()
{int ret;// 遍历客户端链表,移除无效客户端for(int i = 0; i < socketList.count(); ++i){ret = socketList.at(i)->state();if(ret == QTcpSocket::UnconnectedState){socketList.removeAt(i);}}// 遍历客户端链表,判断哪个客户端发送了消息for(int i = 0; i < socketList.count(); ++i){// 会阻塞等待ret = socketList.at(i)->bytesAvailable();if(ret > 0){// 读取数据QByteArray msg = socketList.at(i)->readAll();// 将读取到的数据发送到窗口ui->listWidget->addItem(QString::fromLocal8Bit(msg));// 将数据广播给所有客户端(除了发送此消息的客户端)for(int j = 0; j < socketList.count(); ++j){if(i == j)continue;socketList.at(j)->write(msg);}}}
}

 

相关文章:

  • Perl语言快速入门学习
  • php配合fiddler批量下载淘宝天猫商品数据分享
  • 探索 JQuery EasyUI:构建简单易用的前端页面
  • 服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例
  • 如何在服务器上部署一个java程序
  • 电脑提示d3dcompiler_47.dll丢失的解决方法,实测靠谱的5种方法
  • Linux C++
  • 图卷积网络(Graph Convolutional Network, GCN)
  • 一文详解扩散模型
  • 王思聪隐形女儿曝光
  • Centos离线安装Python3
  • 人工智能—美国加利福尼亚州房价预测实战
  • Ribbon与Nginx的区别
  • 华为IPD体系中三大流程之IPD流程的六个阶段和七个评审点介绍
  • object类教程
  • 《深入 React 技术栈》
  • android图片蒙层
  • Cumulo 的 ClojureScript 模块已经成型
  • JavaScript 一些 DOM 的知识点
  • Java到底能干嘛?
  • js面向对象
  • laravel with 查询列表限制条数
  • Laravel 菜鸟晋级之路
  • 将回调地狱按在地上摩擦的Promise
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 使用putty远程连接linux
  • 通过几道题目学习二叉搜索树
  • 微信小程序填坑清单
  • 一个JAVA程序员成长之路分享
  • 自动记录MySQL慢查询快照脚本
  • 【干货分享】dos命令大全
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #知识分享#笔记#学习方法
  • $NOIp2018$劝退记
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C语言)fgets与fputs函数详解
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (计算机网络)物理层
  • (每日一问)基础知识:堆与栈的区别
  • (十五)、把自己的镜像推送到 DockerHub
  • (十一)c52学习之旅-动态数码管
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)面试需要掌握的技巧
  • .NET Core中如何集成RabbitMQ