飞道的博客

Qt+C++ TCP发送接收信息客户端与服务端窗体

349人阅读  评论(0)

 程序示例精选

Qt+C++ TCP发送接收信息客户端与服务端窗体

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

前言

这篇博客针对<<Qt+C++ TCP发送接收信息客户端与服务端窗体>>编写代码,代码整洁,规则,易读。 应用推荐首选。


文章目录

        一、所需工具软件

        二、使用步骤

                1. 引入库

                2. 客户端代码

                3. 服务端代码

                4. 运行结果

         三在线协助


一、所需工具软件

          1. Visual Studio

          2. C++

二、使用步骤

1.引入库

代码如下(示例):


  
  1. #include "QTcpClinet.h"
  2. #include "TcpServer.h"
  3. #include"qstring.h"
  4. #include"qdebug.h"

2.客户端代码

代码如下(示例):


  
  1. #include "QTcpClinet.h"
  2. QTcpClinet::QTcpClinet(QWidget *parent)
  3. : QWidget(parent)
  4. {
  5. ui.setupUi(this);
  6. socket = new QTcpSocket(this);
  7. }
  8. QTcpClinet::~QTcpClinet()
  9. {
  10. delete this->socket; //回收内存
  11. }
  12. void QTcpClinet::on_btn_connect_clicked ()
  13. {
  14. if (ui.btn_connect->text()==tr( "连接服务器"))
  15. {
  16. QString ip = ui.lineEdit_ip->text(); //获取ip
  17. //取消已有的连接
  18. socket-> abort();
  19. //连接服务器
  20. socket->connectToHost(ip, port);
  21. //如果连接成功
  22. if (isconnect)
  23. {
  24. ui.textEdit->append( "The connection was successful!!");
  25. ui.btn_push->setEnabled( true); //按钮使能
  26. //修改按键文字
  27. ui.btn_connect->setText( "断开服务器连接");
  28. //接收缓冲区(服务器)信息
  29. }
  30. else
  31. {
  32. ui.textEdit->append( "The connection falied!!");
  33. }
  34. }
  35. else
  36. {
  37. //断开连接
  38. socket->disconnectFromHost();
  39. ui.btn_connect->setText( "连接服务器");
  40. ui.btn_push->setEnabled( false); //关闭发送按钮使能
  41. }
  42. }
  43. //接收缓冲区信息函数
  44. void QTcpClinet::ReadData ()
  45. {
  46. QByteArray buf = socket->readAll();
  47. ui.textEdit->append(buf);
  48. }
  49. //发送按钮事件
  50. void QTcpClinet::on_btn_push_clicked ()
  51. {
  52. QByteArray data = ui.lineEdit_3->text().toUtf8(); //获取lineEdit控件中的数据并发送给服务器
  53. //判断是否写入成功
  54. bool iswrite = socket->waitForBytesWritten();
  55. if (iswrite)
  56. {
  57. //写入成功
  58. }
  59. else
  60. {
  61. //没有写入成功
  62. }
  63. }

3.服务端代码: 


  
  1. #include "TcpServer.h"
  2. #include"qstring.h"
  3. #include"qdebug.h"
  4. #pragma execution_character_set("utf-8")
  5. TcpServer:: TcpServer(QWidget *parent)
  6. : QWidget(parent)
  7. {
  8. ui. setupUi( this);
  9. server = new QTcpServer( this);
  10. //客户机连接信号槽
  11. connect(server, &QTcpServer::newConnection, this, &TcpServer::ClientConnect);
  12. }
  13. TcpServer::~ TcpServer()
  14. {
  15. server-> close();
  16. server-> deleteLater();
  17. }
  18. void TcpServer::on_btn_listen_clicked()
  19. {
  20. if (ui.btn_listen-> text()== "侦听")
  21. {
  22. //侦听指定端口的所有ip
  23. if (!server-> listen(QHostAddress::Any, port))
  24. {
  25. //若出错,则输出错误信息
  26. qDebug() << server-> errorString();
  27. return;
  28. }
  29. //修改按键文字
  30. ui.btn_listen-> setText( "取消侦听");
  31. }
  32. else
  33. {
  34. socket-> abort();
  35. //取消侦听
  36. server-> close();
  37. //修改按键文字
  38. ui.btn_listen-> setText( "侦听");
  39. }
  40. }
  41. void TcpServer::ClientConnect()
  42. {
  43. //解析所有客户连接
  44. while (server-> hasPendingConnections())
  45. {
  46. //连接上后通过socket获取连接信息
  47. QString str = QString( "[ip:%1,port:%2]"). arg(socket-> peerAddress(). toString()). arg(socket-> peerPort());
  48. //提示连接成功
  49. ui.textEdit_server-> append(str+ "Connect to the server");
  50. //复选框选项为连接服务器的ip
  51. ui.comboBox-> addItem(str);
  52. //将socket地址放入combobox属性内
  53. //ui.comboBox->setItemData(ui.comboBox->count()-1, QVariant((int)socket));
  54. //监听客户端是否有消息发送
  55. }
  56. }
  57. //获取客户端向服务器发送的信息
  58. void TcpServer::ReadData1()
  59. {
  60. QString str = QString( "[ip:%1,port:%2]"). arg(socket-> peerAddress(). toString()). arg(socket-> peerPort());
  61. ui.textEdit_server-> append(str + QString(buf));
  62. }
  63. //服务器向客户端发送信息
  64. void TcpServer::on_btn_server_clicked()
  65. {
  66. if(ui.comboBox-> count()== 0) return;
  67. //QTcpSocket* skt= (QTcpSocket*)ui.comboBox->itemData(ui.comboBox->currentIndex()).value<int>();
  68. socket-> write(ui.lineEdit1-> text(). toUtf8());
  69. }

4.运行结果如下: 

 

三、在线协助: 

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!


转载:https://blog.csdn.net/alicema1111/article/details/128472437
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场