• day 10.4


    服务器

    头文件

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. QT_BEGIN_NAMESPACE
    9. namespace Ui { class Widget; }
    10. QT_END_NAMESPACE
    11. class Widget : public QWidget
    12. {
    13. Q_OBJECT
    14. public:
    15. Widget(QWidget *parent = nullptr);
    16. ~Widget();
    17. private slots:
    18. void on_startbtn_clicked();
    19. void newConnection_slot();
    20. void readyRead_slot();
    21. private:
    22. Ui::Widget *ui;
    23. //服务器指针
    24. QTcpServer *server;
    25. //客户端容器
    26. QList clientlist;
    27. };
    28. #endif // WIDGET_H

    主函数

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. QT_BEGIN_NAMESPACE
    9. namespace Ui { class Widget; }
    10. QT_END_NAMESPACE
    11. class Widget : public QWidget
    12. {
    13. Q_OBJECT
    14. public:
    15. Widget(QWidget *parent = nullptr);
    16. ~Widget();
    17. private slots:
    18. void on_startbtn_clicked();
    19. void newConnection_slot();
    20. void readyRead_slot();
    21. private:
    22. Ui::Widget *ui;
    23. //服务器指针
    24. QTcpServer *server;
    25. //客户端容器
    26. QList clientlist;
    27. };
    28. #endif // WIDGET_H

    客户端

    头文件

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. QT_BEGIN_NAMESPACE
    7. namespace Ui { class Widget; }
    8. QT_END_NAMESPACE
    9. class Widget : public QWidget
    10. {
    11. Q_OBJECT
    12. public:
    13. Widget(QWidget *parent = nullptr);
    14. ~Widget();
    15. private slots:
    16. void on_sendBtn_clicked();
    17. void on_connectBtn_clicked();
    18. void on_disconnectBtn_clicked();
    19. void disconnectBtn_slot();
    20. void connected_slot();
    21. void readyRead_slot();
    22. private:
    23. Ui::Widget *ui;
    24. QTcpSocket *socket;
    25. QString name;
    26. };
    27. #endif // WIDGET_H

    主函数

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. //实例化一个客户端
    9. socket= new QTcpSocket(this);
    10. //连接
    11. connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    12. //读取
    13. connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    14. //断开
    15. connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnectBtn_slot);
    16. }
    17. Widget::~Widget()
    18. {
    19. delete ui;
    20. }
    21. void Widget::on_sendBtn_clicked()
    22. {
    23. //组合数据
    24. QString msg =name+":"+ui->lineEdit->text();
    25. //发送
    26. socket->write(msg.toLocal8Bit());
    27. //清空
    28. ui->lineEdit->clear();
    29. }
    30. void Widget::on_connectBtn_clicked()
    31. {
    32. //用户名
    33. name=ui->userNameEdit->text();
    34. //主机地址
    35. QString ip=ui->ipEdit->text();
    36. //端口号
    37. quint16 port=ui->portEdit->text().toUInt();
    38. socket->connectToHost(ip,port);
    39. }
    40. void Widget::on_disconnectBtn_clicked()
    41. {
    42. QString msg=name+":离开聊天室";
    43. socket->write(msg.toLocal8Bit());
    44. //发送断开信号
    45. socket->disconnectFromHost();
    46. }
    47. void Widget::disconnectBtn_slot()
    48. {
    49. QMessageBox::information(this,"提示","推出成功");
    50. }
    51. void Widget::connected_slot()
    52. {
    53. QMessageBox::information(this,"成功","您已经成功进入聊天室");
    54. QString msg=name+":进入聊天室";
    55. socket->write(msg.toLocal8Bit());
    56. }
    57. void Widget::readyRead_slot()
    58. {
    59. QByteArray msg =socket->readAll();
    60. ui->msgWid->addItem(QString::fromLocal8Bit(msg));
    61. }

    现象

  • 相关阅读:
    什么是mybatis,其实很简单
    ckplayer自己定义风格播放器的开发记录
    Windows下Pytorch环境配置(Anaconda、CUDA、CUDNN、Pytorch)
    【JavaEE初阶】多线程 _ 进阶篇 _ 锁的优化、JUC的常用类、线程安全的集合类
    LeetCode算法日记:655. 输出二叉树
    dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
    集成电路模拟版图入门-转行模拟版图基础学习笔记(二)
    QEMU显示虚拟化的几种选项
    直到今天,信息孤岛依旧是各领域企业需要面对的问题
    过滤器(Filter)
  • 原文地址:https://blog.csdn.net/m0_70569664/article/details/133559522