华清远见Qt作业网络聊天室1014
客户端:
#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相关推荐
- java大作业网络聊天室
这个项目是我大一的java期末大作业,学习了一个学期的成果,编程能力不够,做的并不够好,写在这里记录一下自己的成长,也欢迎大家给出宝贵意见! 第一次写博客哟,请多多支持! 该篇博客写一个基于java的 ...
- 华清远见22071作业1011
作业一.将对象树模型手动实现一遍 #include <iostream> #include<list>class obj; using namespace std; typed ...
- 华清远见22071作业端口指令实现灯点亮
1.实验要求:串口输入相应的命令,控制对应的硬件进行工作 例如:在串口工具输入led1on----->板子led1点亮 在串口工具输入led1off----->板子led1熄灭 4.在串口 ...
- 基于UDP的网络聊天室网络编程0811作业-洪庆乐
项目:基于UDP的网络聊天室 功能:1.服务器日志系统,且可以查看(实现) 2.有用户,其他用户收到这个人登入信息(实现) 3.群发消息(实现) 4.如果有用户下线,其他用户收到下线消息(实现) 5. ...
- 网络聊天室——掌赢在线笔试
最近做了掌赢信息科技(上海)有限公司的一个在线笔试题,服务端机试题目--网络聊天室,比较开放,给24个小时进行答题,虽然就一个题目,但是对于我来说,量还是挺大的,对方解释主要是看笔试者的代码风格习惯. ...
- 基于TCP的网络聊天室实现(C语言)
基于TCP的网络聊天室实现(C语言) 一.网络聊天室的功能 二.网络聊天室的结果展示 三.实现思路及流程 四.代码及说明 1.LinkList.h 2.LinkList.c 3.client.c 4. ...
- STM32MP1系列教程连载-华清远见FS-MP1A开发板使用
STM32MP1系列教程连载-华清远见FS-MP1A开发板使用 1.1 FS_MP1A硬件资源介绍 FS-MP1A采用STM32MP157A处理器.STM32MP157A是基于Cortex-A7 32 ...
- Golang网络聊天室案例
1.聊天室设计分析 一. 概览 实现 个网络聊天室(群) 功能分析: 上线下线 聊天,其他人,自己都可以看到聊天消息 查询当前聊天室用户名字 who 可以修改自己名字 rename | Duke 超时 ...
- 华清远见ARM开发培训班
课程背景 ATC的英文全称是Approved Training Center,即授权培训中心.ARM ATC就是指ARM公司授权的培训中心.目前ARM公司在包括英国.德国.美国.日本.韩国.台湾 ...
最新文章
- VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
- CSS学习六:布局剖析
- [转]C语言茶余饭后之if...else PK switch...case
- 从零实现一个简易jQuery框架之一—jQuery框架概述
- python之路_计算机编码及运算符介绍
- 第2讲 | 网络分层的真实含义是什么?
- 2021年,AI哪个方向最火?看看大神们怎么说
- ShardingSphere-Proxy 分库分表 简单示例
- jenkins使用_Spring Boot 系列:使用 Jenkins 部署 Spring Boot
- layout中蛇形线和差分线的使用
- 方维直播Android打包流程
- win10如何删除万能输入法
- erwfgergve
- 【HTML第二个综合案例】----相亲App注册页面
- python查找文字在图片中的位置_使用Python识别图片中的中/英文字
- 利用陀螺仪实现更真实的微信摇一摇动画
- 网络互联技术(1)——前篇—【转载】计算机发展史
- 论文MICO for MRI bias field estimation and tissue segmentation品讲
- 华章8月书讯,夏日静心好读书
- 浙江大学电子信息计算机,浙江大学城市学院计算机与计算科学学院 党政办 计算学院新增12名浙江大学电子信息专业硕士研究生导师...
热门文章
- 【建立个人品牌】自媒体人必须知道的28个新媒体平台
- minikube addons enable ingress 启动错误
- Android scheme链接打开本地应用
- 小白成长记(三、SqlSugar的sum用法)
- 计算机屏幕偏振光原理,隐形却很重要 PC屏幕的那层膜
- Android - 制作聊天气泡.9格式
- mysql 主从复制 error 1677
- 易于设置的触摸板增强神器 bettertouchtool mac中文版(支持M1)
- 【Android】eclipse 实现登录、注册、修改密码、数据库操作
- Unity_二进制,Jason,XML存档读档