日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt学习笔记-简单的TCP程序

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt学习笔记-简单的TCP程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運行截圖如下:



代碼如下:

客戶端:

widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QAbstractSocket> class QTcpSocket;namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QString m_message;QTcpSocket *m_tcpSocket;quint16 m_blockSize; //存放數據大小private slots:void newConnect();void readMessage();void displayError(QAbstractSocket::SocketError);void connectBtnClicked();};#endif // WIDGET_H

widget.cpp

#include "widget.h" #include "ui_widget.h" #include <QtNetwork> #include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);m_tcpSocket=new QTcpSocket(this);connect(m_tcpSocket,&QTcpSocket::readyRead,this,&Widget::readMessage);connect(m_tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));connect(ui->connectPushButton,&QPushButton::clicked,this,Widget::connectBtnClicked); }void Widget::newConnect(){m_blockSize=0;m_tcpSocket->abort();m_tcpSocket->connectToHost(ui->hostLineEdit->text(),ui->portLineEdit->text().toInt()); }void Widget::readMessage(){QDataStream in(m_tcpSocket);in.setVersion(QDataStream::Qt_5_7);if(m_blockSize==0){if(m_tcpSocket->bytesAvailable()<(int)sizeof(quint16))return;in>>m_blockSize;}if(m_tcpSocket->bytesAvailable()<m_blockSize) return;in>>m_message;qDebug()<<"message:"<<m_message;ui->listWidget->insertItem(0,m_message); }void Widget::displayError(QAbstractSocket::SocketError){qDebug()<<m_tcpSocket->errorString(); }void Widget::connectBtnClicked(){newConnect(); }Widget::~Widget() {delete ui; }

main.cpp

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }


服務端:

widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> class QTcpServer;namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QTcpServer *m_tcpServer;private slots:void sendMessage(); };#endif // WIDGET_H

widget.cpp

#include "widget.h" #include "ui_widget.h" #include <QtNetwork> #include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);m_tcpServer=new QTcpServer(this);if(!m_tcpServer->listen(QHostAddress::LocalHost,10086)){qDebug()<<m_tcpServer->errorString();close();}connect(m_tcpServer,&QTcpServer::newConnection,this,&Widget::sendMessage); }Widget::~Widget() {delete ui; }void Widget::sendMessage() {QByteArray block;QDataStream out(&block,QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_5_7);out<<(quint16)0;out<<QString::fromUtf8("你妹");out.device()->seek(0);out<<(quint16)(block.size()-sizeof(quint16));QTcpSocket *clientConnection=m_tcpServer->nextPendingConnection();connect(clientConnection,&QTcpSocket::disconnected,clientConnection, &QTcpSocket::deleteLater);clientConnection->write(block);clientConnection->disconnectFromHost();ui->label->setText("發送數據成功"); }

main.cpp

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }

總結

以上是生活随笔為你收集整理的Qt学习笔记-简单的TCP程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。