十月四日作业

2023-10-04 20:36
文章标签 作业 四日 十月

本文主要是介绍十月四日作业,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、服务器

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>           //服务器头文件
#include <QTcpSocket>           //客户端头文件
#include <QList>                //链表容器
#include <QMessageBox>           //消息对话框
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_switchBtn_clicked();void newConnection_slot();       //自定义处理newConnection信号的槽函数的声明void readyRead_slot();          //自定义处理readyRead信号的槽函数的声明private:Ui::Widget *ui;//定义服务器指针QTcpServer *server;//定义客户端容器QList<QTcpSocket *>clientList;
};
#endif // WIDGET_H

源文件:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化一个服务器server=new QTcpServer(this);connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}Widget::~Widget()
{delete ui;
}//启动/关闭服务器按钮对应的槽函数
void Widget::on_switchBtn_clicked()
{if(ui->switchBtn->text()=="启动"){quint16 port=ui->portEdit->text().toUInt();    //获取ui界面上的端口号//监听客户端的连接请求if(!server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"失败","监听失败");return;}else{QMessageBox::information(this,"成功","服务器启动成功");}//将按钮文本内容改成"关闭"ui->switchBtn->setText("关闭");}else{if(server->isListening()){server->close();ui->switchBtn->setText("启动");}}
}//自定义处理newConnection信号的槽函数的实现
void Widget::newConnection_slot()
{qDebug()<<"您有新的客户端发来连接请求";//获取最新连接的客户端套接字QTcpSocket *s=server->nextPendingConnection();//将该套接字,放入客户端链表中clientList.push_back(s);connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}//readyRead信号对应槽函数的实现
void  Widget::readyRead_slot()
{qDebug()<<"有新的客户端消息发来了";//遍历客户端链表,将无效的客户端移除for(int i=0;i<clientList.size();i++){//判断当前套接字是否是有效连接if(clientList[i]->state()==0){//将该套接字移除客户端容器clientList.removeAt(i);}}//遍历客户端链表,判断是哪个客户端发来的消息for(int i=0;i<clientList.size();i++){if(clientList[i]->bytesAvailable()!=0){//将该套接字中的数据读取出来QByteArray msg=clientList[i]->readAll();//将数据展示到ui界面ui->msgWidget->addItem(QString::fromLocal8Bit(msg));//将接受到的数据,转发给所有客户端for(int j=0;j<clientList.size();j++){clientList[j]->write(msg);}}}
}

测试文件:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

现象:

2、客户端

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket>              //客户端类
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_connectBtn_clicked();void connected_slot();         //自定义处理connected信号的槽函数的声明的声明void readyRead_slot();          //自定义处理readyRead信号的槽函数的声明void disconnected_slot();       //自定义处理disconnected信号的槽函数的声明void on_sendBtn_clicked();void on_disconnectBtn_clicked();private:Ui::Widget *ui;//定义客户端指针QTcpSocket *socket;//定义字符串接受用户QString userName;
};
#endif // WIDGET_H

 源文件:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//给客户端指针实例化对象socket=new QTcpSocket(this);connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);}Widget::~Widget()
{delete ui;
}//连接服务器按钮对应的槽函数
void Widget::on_connectBtn_clicked()
{//获取ui界面上的相关信息userName=ui->userNameEdit->text();    //获取用户名QString ip=ui->ipEdit->text();        //主机地址quint16 port=ui->portEdit->text().toUInt();    //端口号//将客户端连接到给定的服务器socket->connectToHost(ip,port);
}//自定义处理connected信号的槽函数的定义
void Widget::connected_slot()
{QMessageBox::information(this,"成功","您已经成功进入聊天室");//向服务器发送一条数据:***:进入聊天室QString msg=userName+":进入聊天室";socket->write(msg.toLocal8Bit());    //将数据写给服务器
}//自定义处理readyRead信号的槽函数的定义
void Widget::readyRead_slot()
{//读取套接字中的信息QByteArray msg=socket->readAll();//将数据展示到ui界面ui->msgWidget->addItem(QString::fromLocal8Bit(msg));
}//发送按钮对应的槽函数
void Widget::on_sendBtn_clicked()
{//获取ui界面输入的内容QString msg=userName+":"+ui->msgEdit->text();//发送给服务器socket->write(msg.toLocal8Bit());//清空编辑框内容ui->msgEdit->clear();
}//断开服务器按钮对应的槽函数
void Widget::on_disconnectBtn_clicked()
{//高数大家我走了QString msg=userName+"离开聊天室";socket->write(msg.toLocal8Bit());//断开连接socket->disconnectFromHost();}//自定义处理disconnected信号的槽函数的定义
void Widget::disconnected_slot()
{QMessageBox::information(this,"提示","退出成功");
}

测试文件:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

现象:

这篇关于十月四日作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/2677

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

Java高级Day38-网络编程作业

112.网络编程作业 //1.使用字符流的方式,编写一个客户端程序和服务器端程序//2.客户端发送"name",服务器端接收到后,返回"我是nova"//3.客户端发送"hobby",服务器端接收到后,返回"编写java程序"//4.不是这两个问题,回复"你说啥呢"​​===============//客户端//===============public class SocketT

0906作业+思维导图梳理

一、作业: 1、创捷一个类似于qq登录的界面 1)源代码 #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//QPushbutton:登录、退出this->join = new QP

2024.9.6 作业

1> 手写unique_ptr指针指针 #include <iostream>using namespace std;template <typename T>class my_unique_ptr{public:explicit my_unique_ptr(T *p = nullptr) noexcept // 构造函数{ptr = p;}~my_unique_ptr() noexcep

9月6号作业

1:.h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QWidget> #include<QIcon> //图标类 #include<QLabel> //标签类 #include<QMovie> //动图类 #include<QLineEdit> //行编辑器类

Flink实例(六十九): flink 作业提交(四)总结

独立集群提交 # 启动集群bin/start-cluster.sh# 提交job./bin/flink run ./examples/batch/WordCount.jar --input hdfs:/user/yuan/input/wc.count --output hdfs:/user/yuan/swwwttt yarn session # 启动集群./bin/

【#第三期实战营闯关作业 ## 茴香豆:企业级知识库问答工具】

今天学习了《 茴香豆:企业级知识库问答工具》这一课,对大模型的应用有了更深得认识。以下是记录本课实操过程及截图: 搭建茴香豆虚拟环境: 输入以下命令 ``studio-conda -o internlm-base -t huixiangdou 成功安装虚拟环境截图 安装茴香豆 cd /root 克隆代码仓库 git clone https://github.com/internlm/h

最近刚接触用到的一些linux命令(CentOS7的命令)二〇一八年十月三十日

linux  查看本地     ip  ip addr  查看本地系统     #cat /etc/issue 在CentOS下执行显示为: CentOS release 5.7 (Final) Kernel \r on an \m 或在Ubuntu下显示为: Ubuntu 11.04 \n \l 可以用来查看当前正在运行的 Ubuntu 的版本号。  查看系统内核     uname -a

CentOS7系统下安装mysql5.7从下载到安装,,,,末尾附带redis安装教程二〇一八年十月三十日

改了将近三个月的前端bug了, 感觉java不会了 ,最近想温习一下linux系统, 当然,我这种穷b是没钱买服务器的, 只能自己下载个虚拟机玩玩......(台式机没有独立网卡的不要下载最新版的虚拟机,最新版的虚拟机好像需要有网卡支持什么的,,,有独立网卡的随意,)      安装虚拟机, 安装linux系统, 我得系统是这个版本的: 命令  cat /etc/issue

Quartz 作业调度器

1、Quartz  java实现  注:这里使用的是Quartz1.6.5版本(包:quartz-1.6.5.jar)   [java]  view plain copy //测试main函数   //QuartzTest.java   package quartzPackage;         import java.text.SimpleDateFormat