客户端:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowIcon(QIcon(":/icon/2.jpg"));this->setWindowTitle("天の選びの息子");this->setWindowOpacity(0.8);ui->listWidget->addItem(new QListWidgetItem(QIcon(":icon/3.jpg"), tr("Triangle")));//给客户端实例化控件socket =new QTcpSocket(this);//触发connected信号,连接对应的槽函数connect(socket,&QTcpSocket::connected,this,&Widget::on_connected_slot);//当客户端接收到客户端发送过来的消息时,socket就会自动触发connect(socket,&QTcpSocket::readyRead,this,&Widget::on_readyRead_slot);
}Widget::~Widget()
{delete ui;
}
//连接服务器的槽函数
void Widget::on_connectbton_clicked()
{if(ui->connectbton->text()=="连接服务器"){ip=ui->iplineEdit_2->text();port=quint16(ui->portlineEdit_3->text().toUInt());//连接服务器socket->connectToHost(ip,port);//客户端连接服务器的函数ui->userlineEdit->setEnabled(false);ui->iplineEdit_2->setEnabled(false);ui->portlineEdit_3->setEnabled(false);ui->connectbton->setText("断开服务器");}else {username=ui->userlineEdit->text();QString mes =username+"离开聊天室";socket->write(mes.toLocal8Bit());//调用断开连接服务器的函数socket->disconnectFromHost();ui->userlineEdit->setEnabled(true);ui->iplineEdit_2->setEnabled(true);ui->portlineEdit_3->setEnabled(true);ui->connectbton->setText("连接服务器");//  ui->connectbton->setEnabled(true);}}//connected的槽函数
void Widget::on_connected_slot()
{//username=ui->userlineEdit->text();// qDebug()<<"连接成功";QString mes=username+":进入聊天室";//将信息发送给服务器socket->write(mes.toLocal8Bit());
}//readyRead
void Widget::on_readyRead_slot()
{//读取服务器传过来的信息QString mes=QString::fromLocal8Bit(socket->readAll());//将信息展示到自己的页面上ui->listWidget->addItem(mes);}//发送按钮对应的槽函数
void Widget::on_msbton_clicked()
{username=ui->userlineEdit->text();QString mes=username+":"+ui->mslineEdit4->text();socket->write(mes.toLocal8Bit());//将信息写入socket//将行编辑器内容清空一下ui->mslineEdit4->clear();}

服务器:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//设置窗口图标this->setWindowIcon(QIcon(":/icon/1.jpg"));this->setWindowTitle("失われた楽園");this->setWindowOpacity(0.8);//实例化服务器server=new QTcpServer(this);
}Widget::~Widget()
{delete ui;
}//发送广播消息函数
void Widget::sendMes(QString mes)
{for(int i=0;i<sockets.size();i++){sockets[i]->write(mes.toLocal8Bit());//write向sfd中写数据}}//创建服务器的槽函数
void Widget::on_bton_clicked()
{port=quint16(ui->lineEdit->text().toUInt());server->listen(QHostAddress::Any,port);//功能:监听客户端的连接//参数一,能连接该服务器的主机,任意主机都可连接//参数二,端口号,如果不设置端口号,默认为0,意味着任何端口号都能连接//如果有客户端连接,就会触发一个newConnect的信号,我们可以在这connect(server,&QTcpServer::newConnection,this,&Widget::on_newConnection_slot);//服务器发射信号,newconnecttion,新客户端连接就会触发,this自己接收//自定义槽函数处理逻辑QString mes=ui->bton->text();if(mes=="创建服务器"){ui->bton->setText("关闭服务器");ui->lineEdit->setEnabled(false);}else {ui->bton->setText("创建服务器");ui->lineEdit->setEnabled(true);}}//处理服务器槽函数逻辑
void Widget::on_newConnection_slot()
{QTcpSocket *sfd=server->nextPendingConnection();//获取最新一次连接一次客户端的套接字//返回自:最新客户端的套接字的指针sockets.push_back(sfd);//如果客户端有发消息给服务器,服务器就会触发一个readyreadconnect(sfd,&QTcpSocket::readyRead,this,&Widget::on_readyRead_slot);
}//关于readyRead信号槽函数
void Widget::on_readyRead_slot()
{// qDebug()<<"此时客户端的个数:"<<sockets.size();//遍历所有的客户端,判断是哪一个客户端有消息产生for(int i=0;i<sockets.size();i++){if(sockets[i]->bytesAvailable()){//功能:判断当前socket中是否有带读的数据//参数:无//返回值// sockets[i]->readAll();//QByteArray readAll()//功能:读取该客户端发来的所有数据//返回值:读取数据,并放入数组中QByteArray mes=sockets[i]->readAll();//将客户端发来的数据展示到listwigetui->listWidget->addItem(QString::fromLocal8Bit(mes) );//QString::fromLocal8Bit(mes)//Qstring 中成员函数,将QByteArry转变成字符串//自己的函数实现广播功能sendMes(QString::fromLocal8Bit(mes));}}}

华清远见Qt作业网络聊天室1014相关推荐

  1. java大作业网络聊天室

    这个项目是我大一的java期末大作业,学习了一个学期的成果,编程能力不够,做的并不够好,写在这里记录一下自己的成长,也欢迎大家给出宝贵意见! 第一次写博客哟,请多多支持! 该篇博客写一个基于java的 ...

  2. 华清远见22071作业1011

    作业一.将对象树模型手动实现一遍 #include <iostream> #include<list>class obj; using namespace std; typed ...

  3. 华清远见22071作业端口指令实现灯点亮

    1.实验要求:串口输入相应的命令,控制对应的硬件进行工作 例如:在串口工具输入led1on----->板子led1点亮 在串口工具输入led1off----->板子led1熄灭 4.在串口 ...

  4. 基于UDP的网络聊天室网络编程0811作业-洪庆乐

    项目:基于UDP的网络聊天室 功能:1.服务器日志系统,且可以查看(实现) 2.有用户,其他用户收到这个人登入信息(实现) 3.群发消息(实现) 4.如果有用户下线,其他用户收到下线消息(实现) 5. ...

  5. 网络聊天室——掌赢在线笔试

    最近做了掌赢信息科技(上海)有限公司的一个在线笔试题,服务端机试题目--网络聊天室,比较开放,给24个小时进行答题,虽然就一个题目,但是对于我来说,量还是挺大的,对方解释主要是看笔试者的代码风格习惯. ...

  6. 基于TCP的网络聊天室实现(C语言)

    基于TCP的网络聊天室实现(C语言) 一.网络聊天室的功能 二.网络聊天室的结果展示 三.实现思路及流程 四.代码及说明 1.LinkList.h 2.LinkList.c 3.client.c 4. ...

  7. STM32MP1系列教程连载-华清远见FS-MP1A开发板使用

    STM32MP1系列教程连载-华清远见FS-MP1A开发板使用 1.1 FS_MP1A硬件资源介绍 FS-MP1A采用STM32MP157A处理器.STM32MP157A是基于Cortex-A7 32 ...

  8. Golang网络聊天室案例

    1.聊天室设计分析 一. 概览 实现 个网络聊天室(群) 功能分析: 上线下线 聊天,其他人,自己都可以看到聊天消息 查询当前聊天室用户名字 who 可以修改自己名字 rename | Duke 超时 ...

  9. 华清远见ARM开发培训班

       课程背景 ATC的英文全称是Approved Training Center,即授权培训中心.ARM ATC就是指ARM公司授权的培训中心.目前ARM公司在包括英国.德国.美国.日本.韩国.台湾 ...

最新文章

  1. VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
  2. CSS学习六:布局剖析
  3. [转]C语言茶余饭后之if...else PK switch...case
  4. 从零实现一个简易jQuery框架之一—jQuery框架概述
  5. python之路_计算机编码及运算符介绍
  6. 第2讲 | 网络分层的真实含义是什么?
  7. 2021年,AI哪个方向最火?看看大神们怎么说
  8. ShardingSphere-Proxy 分库分表 简单示例
  9. jenkins使用_Spring Boot 系列:使用 Jenkins 部署 Spring Boot
  10. layout中蛇形线和差分线的使用
  11. 方维直播Android打包流程
  12. win10如何删除万能输入法
  13. erwfgergve
  14. 【HTML第二个综合案例】----相亲App注册页面
  15. python查找文字在图片中的位置_使用Python识别图片中的中/英文字
  16. 利用陀螺仪实现更真实的微信摇一摇动画
  17. 网络互联技术(1)——前篇—【转载】计算机发展史
  18. 论文MICO for MRI bias field estimation and tissue segmentation品讲
  19. 华章8月书讯,夏日静心好读书
  20. 浙江大学电子信息计算机,浙江大学城市学院计算机与计算科学学院 党政办 计算学院新增12名浙江大学电子信息专业硕士研究生导师...

热门文章

  1. 【建立个人品牌】自媒体人必须知道的28个新媒体平台
  2. minikube addons enable ingress 启动错误
  3. Android scheme链接打开本地应用
  4. 小白成长记(三、SqlSugar的sum用法)
  5. 计算机屏幕偏振光原理,隐形却很重要 PC屏幕的那层膜
  6. Android - 制作聊天气泡.9格式
  7. mysql 主从复制 error 1677
  8. 易于设置的触摸板增强神器 bettertouchtool mac中文版(支持M1)
  9. 【Android】eclipse 实现登录、注册、修改密码、数据库操作
  10. Unity_二进制,Jason,XML存档读档