網(wǎng)站首頁 編程語言 正文
本文實例為大家分享了QT網(wǎng)絡(luò)通信TCP客戶端實現(xiàn)的具體代碼,供大家參考,具體內(nèi)容如下
QT中基于TCP套接字的網(wǎng)絡(luò)通信需要用到兩個類
- QTcpServer:服務(wù)器類,用于監(jiān)聽客戶端連接和客戶端建立連接
- QTcpSocket:通信套接字類,客戶端和服務(wù)端都需要使用*
這兩個類都屬于網(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("斷開連接");
? ? });
? ? ?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>連接服務(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界面
原文鏈接:https://blog.csdn.net/qq_44719402/article/details/118881618
相關(guān)推薦
- 2022-01-29 yii restfull api 訪問404
- 2023-06-21 C#高級靜態(tài)語言效率利器之泛型詳解_C#教程
- 2022-11-01 golang連接MongoDB數(shù)據(jù)庫及數(shù)據(jù)庫操作指南_Golang
- 2022-12-13 Dart多態(tài)控制反轉(zhuǎn)編碼規(guī)范實例詳解_Dart
- 2022-09-25 CSS-解決因子元素浮動引起的父元素高度塌陷問題
- 2022-12-11 詳解Android?GLide圖片加載常用幾種方法_Android
- 2022-08-23 C++?primer超詳細講解泛型算法_C 語言
- 2022-11-13 一文詳解Go語言單元測試的原理與使用_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支