欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QT網(wǎng)絡通信TCP客戶端實現(xiàn)詳解

 更新時間:2022年08月19日 10:18:57   作者:qq_44719402  
這篇文章主要為大家詳細介紹了QT網(wǎng)絡通信TCP客戶端實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了QT網(wǎng)絡通信TCP客戶端實現(xiàn)的具體代碼,供大家參考,具體內容如下

QT中基于TCP套接字的網(wǎng)絡通信需要用到兩個類

  • QTcpServer:服務器類,用于監(jiān)聽客戶端連接和客戶端建立連接
  • QTcpSocket:通信套接字類,客戶端和服務端都需要使用*

這兩個類都屬于網(wǎng)絡通信的network
需要在工程路徑下添加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();//狀態(tài)釋放
? ? ? ? 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("連接狀態(tài):"));
? ? 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">
? ? ? ? <widget 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>發(fā)送信息</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>發(fā)送信息</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界面

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++淺析構造函數(shù)的特性

    C++淺析構造函數(shù)的特性

    構造函數(shù)主要作用在于創(chuàng)建對象時為對象的成員屬性賦值,構造函數(shù)由編譯器自動調用,無須手動調用;析構函數(shù)主要作用在于對象銷毀前系統(tǒng)自動調用,執(zhí)行一 些清理工作
    2022-07-07
  • c++選擇排序詳解

    c++選擇排序詳解

    選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是每一次從無序組的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存放在無序組的起始位置,無序組元素減少,有序組元素增加,直到全部待排序的數(shù)據(jù)元素排完。
    2017-05-05
  • 五個嵌入式C語言中的實用技巧分享

    五個嵌入式C語言中的實用技巧分享

    這篇文章主要和大家分享一下五個嵌入式C語言中的實用技巧,文中的示例代碼講解詳細,對我們學習C語言有一定的幫助,需要的可以參考一下
    2022-12-12
  • C語言實現(xiàn)消消樂小游戲

    C語言實現(xiàn)消消樂小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)消消樂小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++中日期類的常見題目合集分享

    C++中日期類的常見題目合集分享

    這篇文章主要為大家詳細介紹了一些C++中日期類的常見題目,文中的示例代碼講解詳細,對我們掌握C++有一定的幫助,感興趣的小伙伴可以了解一下
    2023-06-06
  • C語言結構體指針引用詳解

    C語言結構體指針引用詳解

    C語言中結構體指針,可細分為指向結構體變量的指針和指向結構體數(shù)組的指針。本文將詳細為大家介紹一下這兩種結構體指針如何引用,需要的小伙伴可以參考一下
    2021-12-12
  • Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問題詳解

    Matlab利用遺傳算法GA求解非連續(xù)函數(shù)問題詳解

    遺傳算法起源于對生物系統(tǒng)所進行的計算機模擬研究。其本質是一種高效、并行、全局搜索的方法,能在搜索過程中自動獲取和積累有關搜索空間的知識,并自適應地控制搜索過程以求得最佳解。本文將利用其求解非連續(xù)函數(shù)問題,需要的可以參考一下
    2022-09-09
  • C語言利用面試真題理解指針的使用

    C語言利用面試真題理解指針的使用

    C語言這門課程在計算機的基礎教學中一直占有比較重要的地位,然而要想突破C語言的學習,對指針的掌握是非常重要的,本文將具體針對指針的基礎做詳盡的介紹
    2022-08-08
  • 詳解C++17中nodiscard標記符的使用

    詳解C++17中nodiscard標記符的使用

    在C++?17中引入了一個標記符nodiscard,用于聲明一個?“非棄值(no-discard)表達式”。這篇文章就來和大家來聊一聊nodiscard標記符的使用吧
    2023-02-02
  • 淺談C語言的字節(jié)對齊 #pragma pack(n)2

    淺談C語言的字節(jié)對齊 #pragma pack(n)2

    下面小編就為大家?guī)硪黄獪\談C語言的字節(jié)對齊 #pragma pack(n)2。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論