当前位置:   article > 正文

QTday5 2024-06-19

QTday5 2024-06-19

作业要求:

1.思维导图

2.整理代码:TCP服务器

 作业1:思维导图

作业2:整理代码

运行代码:

widget.h
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QTcpServer>
  5. #include <QList>
  6. #include <QMessageBox>
  7. #include <QTcpSocket>
  8. #include <QByteArray>
  9. QT_BEGIN_NAMESPACE
  10. namespace Ui { class Widget; }
  11. QT_END_NAMESPACE
  12. class Widget : public QWidget
  13. {
  14. Q_OBJECT
  15. public:
  16. Widget(QWidget *parent = nullptr);
  17. ~Widget();
  18. private slots:
  19. void on_startBtn_clicked();
  20. void newConnection_slot();
  21. void readyRead_slot();
  22. private:
  23. Ui::Widget *ui;
  24. //套接字文件
  25. QTcpServer *server;
  26. QList<QTcpSocket *> socketlist;
  27. };
  28. #endif // WIDGET_H
widget.cpp
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4. : QWidget(parent)
  5. , ui(new Ui::Widget)
  6. ,server(new QTcpServer(this))
  7. {
  8. ui->setupUi(this);
  9. }
  10. Widget::~Widget()
  11. {
  12. delete ui;
  13. }
  14. void Widget::on_startBtn_clicked()
  15. {
  16. //1.创建好套接字后,首先绑定port
  17. quint16 port = ui->portEdit->text().toUInt();
  18. //2.开启监听
  19. if(server->listen(QHostAddress::Any,port)){
  20. //开启监听成功
  21. QMessageBox::information(this,"提示","开启监听成功",QMessageBox::Ok);
  22. }else{
  23. //开启监听失败
  24. QMessageBox::information(this,"提示","开启监听失败",QMessageBox::Ok);
  25. return;
  26. }
  27. //运行至此,开始连接newConnection()函数和槽
  28. connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
  29. }
  30. void Widget::newConnection_slot()
  31. {
  32. //进入该函数,说明接受到客户端的连接
  33. //1.创建用于通信的套接字文件
  34. QTcpSocket *s = server->nextPendingConnection();
  35. //2.放入套接字容器
  36. socketlist.push_back(s);
  37. //发送信号readyread,将套接字与对应槽函数连接,从而可以实现通信。
  38. connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
  39. }
  40. void Widget::readyRead_slot()
  41. {
  42. //首先去除无效套接字文件。
  43. for(int i=0;i<socketlist.count();i++){
  44. if(socketlist.at(i)->state()==0){
  45. //说明无效,从列表中去除
  46. socketlist.removeAt(i);
  47. }
  48. }
  49. //接受信息
  50. for(int i=0;i<socketlist.count();i++){
  51. if(socketlist.at(i)->bytesAvailable()!=0){
  52. //说明接受到了信息
  53. QByteArray msg = socketlist.at(i)->readAll();
  54. ui->msgList->addItem(QString::fromLocal8Bit(msg));
  55. for(int j=0;j<socketlist.count();j++){
  56. socketlist.at(j)->write(msg);
  57. }
  58. }
  59. }
  60. }

运行截图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/741201
推荐阅读
相关标签
  

闽ICP备14008679号