Qtの開発 - ネットワークUDPクライアントのプログラミング

今日は元旦ですが、私はあなたのすべてのハッピーニューイヤーを望みます!


ディレクトリ

レンダリング

マニュアルの読み

バインドバインド:

読んで読んで():

ルーチン

udpclient.h

udpclient.cpp


レンダリング

そして、トランシーバと併せて、上端サービス

マニュアルの読み

バインドバインド:

UDPネストされたキーワードについて、UDPデータテーブルは、指定されたアドレスまたは指定ポートに達するたびに、結合した後、readRead()信号が送信されます!

読んで読んで():

新しいデータが現在のリードチャネルデバイスから読み込まれるたびに、この信号が発行されます。新しいペイロードネットワークデータは、ネットワークソケットに到着したとき、またはデータの新しいブロックがデバイスに取り付けられたときにときに、新しいデータは、例えば、再び利用可能である場合にのみ送信されます。

この信号は、(どのような信号が再帰??を送信することができる)再帰送信することができません

(注)は、イベントループやコールwaitForReadyReadを(再入力した場合)readyRead()信号に接続され、タンク内(waitForReadyRead()はまだtrueを返すかもしれないが)、信号が再発行されません。

あなたは)readyRead()信号に接続され、タンク内のイベントループをか(waitForReadyReadを呼び出して再入力した場合(waitForReadyRead()がまだtrueを返すかもしれないが)、信号が再発行されません。

ルーチン

udpclient.h

#ifndef UDPCLIENT_H
#define UDPCLIENT_H

#include <QDialog>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QPushButton>
#include <QUdpSocket>
#include <QMessageBox>
#include <QHostAddress>

class UDPClient : public QDialog
{
    Q_OBJECT

public:
    UDPClient(QWidget *parent = nullptr);
    ~UDPClient();

public slots:
    void CloseBtnClicked();
    void dataRecieved();

private:
    //布局控件
    QTextEdit *ReciveTextEdit;
    QPushButton *CloseBtn;
    QVBoxLayout *mainLayout;
    //网络控件
    int port;
    QUdpSocket *udpSocket;

};

#endif // UDPCLIENT_H

udpclient.cpp

#include "udpclient.h"

UDPClient::UDPClient(QWidget *parent)
    : QDialog(parent)
{
    setWindowIcon(QIcon("icon.png"));
    setWindowTitle(QStringLiteral("UDP客户端"));
    //布局设计
    ReciveTextEdit = new QTextEdit(this);
    CloseBtn = new QPushButton(this);
    CloseBtn->setText(QStringLiteral("关闭"));
    mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(ReciveTextEdit);
    mainLayout->addWidget(CloseBtn);
    //关闭事件关联
    connect(CloseBtn,SIGNAL(clicked()),this,SLOT(CloseBtnClicked()));
    //网络参数设定,UDP端口参数设定
    quint16 port = 5555;
    udpSocket = new QUdpSocket(this);
    //数据事件关联
    connect(udpSocket,SIGNAL(readRead()),this,SLOT(dataRecived()));
    bool result = udpSocket->bind(port);//绑定到指定的端口上
    if(!result){//如果错误返回
        QMessageBox::information(this,QStringLiteral("错误!"),QStringLiteral("UDP出现了错误!"));
        return;
    }
    
}

UDPClient::~UDPClient()
{

}

//关闭按键事件
void UDPClient::CloseBtnClicked(){
    close();
}

void UDPClient::dataRecieved(){
    while (udpSocket->hasPendingDatagrams()) {//判断数据报表是否有效
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(datagram.data(),datagram.size());
        QString msg = datagram.data();
        ReciveTextEdit->insertPlainText(msg);//写入返回的数据
    }
    
    
}

 

242元記事公開 ウォンの賞賛237 ビューに10万+を

おすすめ

転載: blog.csdn.net/qq_41895747/article/details/104080939