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

国庆day5

 QT实现TCP服务器客户端搭建的代码 

ser.h

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

ser.cpp

#include "ser.h"
#include "ui_ser.h"Ser::Ser(QWidget *parent): QWidget(parent), ui(new Ui::Ser)
{ui->setupUi(this);server=new QTcpServer(this);    connect(server,&QTcpServer::newConnection,this,&Ser::newConnection_slot);
}Ser::~Ser()
{delete ui;
}void Ser::on_connectbtn_clicked()
{quint16 port=ui->portbtn->text().toUInt();if(server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"成功","服务器启动成功");}else{QMessageBox::information(this,"失败","服务器启动失败");return;}
}void Ser::newConnection_slot(){QTcpSocket *s=server->nextPendingConnection(); clientList.push_back(s);    connect(s,&QTcpSocket::readyRead,this,&Ser::readyRead_slot);
}void Ser::readyRead_slot(){for(int i=0;i<clientList.count();i++){if(clientList[i]->state()==0){clientList.removeAt(i);}}for(int i=0;i<clientList.count();i++){if(clientList[i]->bytesAvailable()!=0){QByteArray msg=clientList[i]->readAll();ui->msgwidget->addItem(QString::fromLocal8Bit(msg));for(int j=0;j<clientList.count();j++){clientList[j]->write(msg);}}}

cli.h

#ifndef CLI_H
#define CLI_H#include <QWidget>
#include<QTcpSocket>    
#include<QMessageBox>   QT_BEGIN_NAMESPACE
namespace Ui { class cli; }
QT_END_NAMESPACEclass cli : public QWidget
{Q_OBJECTpublic:cli(QWidget *parent = nullptr);~cli();private slots:void on_connectbtn_clicked();void on_sendbtn_clicked();void on_disconnectbtn_clicked();void connected_slot();  void readyRead_slot();  void disconnected_slot();   private:Ui::cli *ui;QTcpSocket *socket; QString username;   
};
#endif // CLI_H

cli.cpp


#include "cli.h"
#include "ui_cli.h"cli::cli(QWidget *parent): QWidget(parent), ui(new Ui::cli)
{ui->setupUi(this);socket=new QTcpSocket(this);   ui->disconnectbtn->setEnabled(false);ui->sendbtn->setEnabled(false);ui->msgedit->setEnabled(false);connect(socket,&QTcpSocket::connected,this,&cli::connected_slot);connect(socket,&QTcpSocket::readyRead,this,&cli::readyRead_slot);connect(socket, &QTcpSocket::disconnected, this, &cli::disconnected_slot);
}cli::~cli()
{delete ui;
}void cli::on_connectbtn_clicked()
{username=ui->usernameedit->text();QString ip=ui->ipedit->text();quint16 port=ui->portedit->text().toUInt();socket->connectToHost(ip,port);
}void cli::connected_slot(){ui->disconnectbtn->setEnabled(true);ui->sendbtn->setEnabled(true);ui->msgedit->setEnabled(true);ui->usernameedit->setEnabled(false);ui->ipedit->setEnabled(false);ui->portedit->setEnabled(false);ui->connectbtn->setEnabled(false);QMessageBox::information(this,"成功","成功进入聊天室");QString msg=username+": 进入聊天室";socket->write(msg.toLocal8Bit());
}void cli::readyRead_slot(){QByteArray msg=socket->readAll();ui->msgwidget->addItem(QString::fromLocal8Bit(msg));
}void cli::on_sendbtn_clicked()
{QString msg=username+": "+ui->msgedit->text();socket->write(msg.toLocal8Bit());ui->msgedit->clear();
}void cli::on_disconnectbtn_clicked()
{QString msg=username+": 离开聊天室";socket->write(msg.toLocal8Bit());socket->disconnectFromHost();
}void cli::disconnected_slot(){ui->disconnectbtn->setEnabled(false);ui->sendbtn->setEnabled(false);ui->msgedit->setEnabled(false);ui->usernameedit->setEnabled(true);ui->ipedit->setEnabled(true);ui->portedit->setEnabled(true);ui->connectbtn->setEnabled(true);QMessageBox::information(this,"退出","退出成功");
}

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

相关文章:

  • 经典算法----迷宫问题(找出所有路径)
  • macOS下 /etc/hosts 文件权限问题修复方案
  • 【星海出品】ansible入门(二) playbook
  • Spring Boot对账号密码进行加密储存
  • 总结js中常见的层次选择器
  • 阿里云ECS服务器上启动的portainer无法访问的问题
  • JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域
  • 开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)
  • [C]嵌入式中变量存储方案
  • 热迁移中VirtIO-PCI设备的配置空间处理
  • 模拟滤波器的基础知识和设计
  • 机器学习基础-Pandas学习笔记
  • 【GIT版本控制】--协作流程
  • 简析Cookie、Session、Token
  • 加速attention计算的工业标准:flash attention 1和2算法的原理及实现
  • 小程序获取用户手机号
  • Zama的fhEVM:基于全同态加密实现的隐私智能合约
  • Mac M1安装ROS1或ROS2
  • [NISACTF 2022]popchains - 反序列化+伪协议
  • 分贝定义简介
  • socket简介
  • 【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023
  • 七、互联网技术——SQL查询
  • 1.6 计算机网络的性能
  • 小程序中如何核销订单和优惠券
  • 211 毕业就入职 30 人的小公司是什么体验
  • aardio 读取 Excel文件,显示在 listview 中
  • Web:前端常用的几种Http请求GET和POST样例
  • clickonce 发布的winform 如何CA认证?
  • #力扣:13. 罗马数字转整数@FDDLC