本文实例为大家分享了QT网络通信TCP客户端实现的具体代码,供大家参考,具体内容如下QT中基于TCP套接字的网络通信需要用到两个类QTcpServer:服务器类,用于监听客户端连接和客户端建立连接QT...

本文实例为大家分享了QT网络通信TCP客户端实现的具体代码,供大家参考,具体内容如下

QT中基于TCP套接字的网络通信需要用到两个类

  • QTcpServer:服务器类,用于监听客户端连接和客户端建立连接
  • QTcpSocket:通信套接字类,客户端和服务端都需要使用*


需要在工程路径下添加network

QT += core gui network

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);
  ui->port->setText("8899");
  ui->ip->setText("127.0.0.1");
  setWindowTitle("客户端");
  m_tcp = new QTcpSocket(this);

  connect(m_tcp,&QTcpSocket::readyRead,this,[=](){
    QByteArray data = m_tcp->readAll();
    ui->record->append("服务端:"+data);

  });
  connect(m_tcp,&QTcpSocket::disconnected,this,[=]()
  {
    ui->connect->setEnabled(true);
    ui->disconnect->setDisabled(true);
    m_tcp->close();
//    m_tcp->deleteLater();//状态释放
    m_status->setPixmap(QPixmap(":/red.png").scaled(20,20));
    ui->record->append("断开连接");

  });
  connect(m_tcp,&QTcpSocket::connected,this,[=](){
   m_status->setPixmap(QPixmap(":/green.png").scaled(20,20));
   ui->connect->setDisabled(true);
   ui->disconnect->setEnabled(true);
   ui->record->append("连接成功");
  });
  //
  ui->disconnect->setDisabled(true);
  m_status = new QLabel;
  m_status->setPixmap(QPixmap(":/red.png").scaled(20,20));
  ui->statusBar->addwidget(new QLabel("连接状态:"));
  ui->statusBar->addWidget(m_status);

}

MainWindow::~MainWindow()
{
  delete ui;
}

void MainWindow::on_sendMsg_clicked()
{
 QString msg = ui->message->toPlainText();
  m_tcp->write(msg.toUtf8());
  ui->record->append("客户端:"+msg);

}

void MainWindow::on_connect_clicked()
{
  QString ip=ui->ip->text();

  unsigned short port=ui->port->text().toUShort();

  m_tcp->connectToHost(QHostAddress(ip),port);

  ui->connect->setEnabled(false);
  ui->disconnect->setDisabled(false);

}

void MainWindow::on_disconnect_clicked()
{

  m_tcp->close();
  ui->connect->setEnabled(true);
  ui->disconnect->setDisabled(true);

}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>
#include <Qlabel>
#include <QHostAddress>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = nullptr);
  ~MainWindow();

private slots:


  void on_sendMsg_clicked();

  void on_connect_clicked();

  void on_disconnect_clicked();

private:
  Ui::MainWindow *ui;
  QTcpSocket *m_tcp;
  QLabel   *m_status;
};

#endif // MAINWINDOW_H

ui文件

<?XML version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
 <property name="geometry">
 <rect>
  <x>0</x>
  <y>0</y>
  <width>428</width>
  <height>606</height>
 </rect>
 </property>
 <property name="windowTitle">
 <string>MainWindow</string>
 </property>
 <widget class="QWidget" name="centralWidget">
 <layout class="QvboxLayout" name="verticalLayout">
  <item>
  <widget class="QWidget" name="widget" native="true">
   <layout class="QGridLayout" name="gridLayout">
   <item row="1" column="0">
    <widget class="QLabel" name="label_3">
    <property name="text">
     <string>IP:</string>
    </property>
    </widget>
   </item>
   <item row="0" column="0">
    <widgehwrqpUzt class="QLabel" name="label">
    <property name="text">
     <string>端口:</string>
    </property>
    </widget>
   </item>
   <item row="1" column="1">
    <widget class="QLineEdit" name="ip"/>
   </item>
   <item row="1" column="2">
    <widget class="QPushButton" name="disconnect">
    <property name="text">
     <string>断开连接</string>
    </property>
    </widget>
   </item>
   <item row="0" column="1">
    <widget class="QLineEdit" name="port"/>
   </item>
   <item row="0" column="2">
    <widget class="QPushButton" name="connect">
    <property name="text">
     <string>连接服务器</string>
    </property>
    </widget>
   </item>
   </layout>
  </widget>
  </item>
  <item>
  <widget class="QGroupBox" name="groupBox">
   <property name="title">
   <string>历史信息</string>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout_2">
   <item>
    <widget class="QTextEdit" name="record"/>
   </item>
   </layout>
  </widget>
  </item>
  <item>
  <widget class="QGroupBox" name="groupBox_2">
   <property name="title">
   <string>发送信息</string>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout_3">
   <item>
    <widget class="QTextEdit" name="message"/>
   </item>
   </layout>
  </widget>
  </item>
  <item>
  <widget class="QWidget" name="widget_2" native="true">
   <layout class="QHBoxLayout" name="horizontalLayout_4">
   <item>
    <spacer name="horizontalSpacer_2">
    <property name="orientation">
     <enum>Qt::Horizontal</enum>
    </property>
    <property name="sizeHint" stdset="0">
     <size>
     <width>136</width>
     <height>20</height>
     </size>
    </property>
    </spacer>
   </item>
   <item>
    <widget class="QPushButton" name="sendMsg">
    <property name="text">
     <string>发送信息</string>
    </property>
    </widget>
   </item>
   <item>
    <spacer name="horizontalSpacer">
    <property name="orientation">
     <enum>Qt::Horizontal</enum>
    </property>
    <property name="sizeHint" stdset="0">
     <size>
     <width>135</width>
     <height>20</height>
     </size>
    </property>
    </spacer>
   </item>
   </layout>
  </widget>
  </item>
 </layout>
 </widget>
 <widget class="QMenuBar" name="menuBar">
 <property name="geometry">
  <rect>
  <x>0</x>
  <y>0</y>
  <width>428</width>
  <height>23</height>
  </rect>
 </property>
 </widget>
 <widget class="QToolBar" name="mainToolBar">
 <attribute name="toolBarArea">
  <enum>TopToolBarArea</enum>
 </attribute>
 <attribute name="toolBarBreak">
  <bool>false</bool>
 </attribute>
 </widget>
 <widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

ui界面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。