• 国庆作业5


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

    服务器代码:

    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. server = new QTcpServer(this);
    9. connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
    10. }
    11. Widget::~Widget()
    12. {
    13. delete ui;
    14. }
    15. //启动按钮的槽函数
    16. void Widget::on_startBtn_clicked()
    17. {
    18. quint16 port=ui->portEdit->text().toUInt();
    19. if(server->listen(QHostAddress::Any,port))
    20. {
    21. QMessageBox::information(this,"失败","监听失败");
    22. return ;
    23. }else
    24. {
    25. QMessageBox::information(this,"成功","服务器监听成功");
    26. return ;
    27. }
    28. }
    29. void Widget::newConnection_slot()
    30. {
    31. qDebug()<<"您有新的客户端请求";
    32. QTcpSocket *s=server->nextPendingConnection();
    33. clientList.push_back(s);
    34. connect(s,&QTcpSocket::readyRead,this,& Widget::readyRead_slot);
    35. }
    36. void Widget::readyRead_slot()
    37. {
    38. qDebug("有新消息发来了");
    39. for(int i=0;isize();i++)
    40. {
    41. if(clientList[i]->state()==0)
    42. {
    43. clientList.removeAt(i);
    44. }
    45. }
    46. for(int i=0;isize();i++)
    47. {
    48. if(clientList[i]->bytesAvailable()!=0)
    49. {
    50. QByteArray msg=clientList[i]->readAll();
    51. ui->msgWidget->addItem(QString::fromLocal8Bit(msg));
    52. for(int j=0;jsize();j++)
    53. {
    54. clientList[j]->write(msg);
    55. }
    56. }
    57. }
    58. }

    客户端代码:

    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. socket =new QTcpSocket(this);
    9. connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    10. connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    11. connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
    12. }
    13. Widget::~Widget()
    14. {
    15. delete ui;
    16. }
    17. //连接服务器按钮
    18. void Widget::on_connectBtn_clicked()
    19. {
    20. userName =ui->userNameEdit->text();
    21. QString ip=ui->ipEdit->text();
    22. quint16 port = ui->portEdit->text().toUInt();
    23. socket->connectToHost(ip,port);
    24. }
    25. void Widget::connected_slot()
    26. {
    27. QMessageBox::information(this,"成功","您已经成功进入聊天室");
    28. QString msg=userName + ":进入聊天室";
    29. socket->write(msg.toLocal8Bit());
    30. }
    31. void Widget::readyRead_slot()
    32. {
    33. QByteArray msg=socket->readAll();
    34. ui->msgWidget->addItem(QString::fromLocal8Bit(msg));
    35. }
    36. void Widget::on_sendBtn_clicked()
    37. {
    38. QString msg=userName+":"+ui->msgedit->text();
    39. socket->write(msg.toLocal8Bit());
    40. ui->msgedit->clear();
    41. }
    42. void Widget::on_disconnectBtn_clicked()
    43. {
    44. QString msg =userName+":我走了哈,我不打扰";
    45. socket->write(msg.toLocal8Bit());
    46. socket->disconnectFromHost();
    47. }
    48. void Widget::disconnected_slot()
    49. {
    50. QMessageBox::information(this,"提示","退出成功");
    51. }

  • 相关阅读:
    Linux操作系统安装与gcc和内核升级
    【Pygame实战】飞机射击大作:宇宙激战一触即发...这款超经典的射击游戏也该拿出来重启了~
    EXPLAIN概述与字段剖析
    Ubuntu 22.04 安装 Terraform
    期货小资金怎么做大(期货小资金怎么做大基金)
    SpringBoot面试题(五十道)
    Golang指针隐式间接引用
    五子棋简单AI算法(C#版)
    每日一题js
    echarts-可视化地图防重叠文本框
  • 原文地址:https://blog.csdn.net/cwj442257772/article/details/133553491