日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

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

作者:qq_44719402 ? 更新時間: 2022-10-16 編程語言

本文實例為大家分享了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

欄目分類
最近更新