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

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

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

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

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

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

這兩個(gè)類都屬于網(wǎng)絡(luò)通信的network
需要在工程路徑下添加network

QT += core gui network

服務(wù)器

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("服務(wù)端:"+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("斷開(kāi)連接");

? ? });
? ? ?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>斷開(kāi)連接</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>連接服務(wù)器</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界面

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    c++選擇排序詳解

    選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是每一次從無(wú)序組的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,存放在無(wú)序組的起始位置,無(wú)序組元素減少,有序組元素增加,直到全部待排序的數(shù)據(jù)元素排完。
    2017-05-05
  • 五個(gè)嵌入式C語(yǔ)言中的實(shí)用技巧分享

    五個(gè)嵌入式C語(yǔ)言中的實(shí)用技巧分享

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

    C語(yǔ)言實(shí)現(xiàn)消消樂(lè)小游戲

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

    C++中日期類的常見(jiàn)題目合集分享

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

    C語(yǔ)言結(jié)構(gòu)體指針引用詳解

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

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

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

    C語(yǔ)言利用面試真題理解指針的使用

    C語(yǔ)言這門(mén)課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語(yǔ)言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-08-08
  • 詳解C++17中nodiscard標(biāo)記符的使用

    詳解C++17中nodiscard標(biāo)記符的使用

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

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

    下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言的字節(jié)對(duì)齊 #pragma pack(n)2。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01

最新評(píng)論