簡單的Qt網絡通訊

環境:需要使用網絡庫
1.使用Qt開發時,直接在pro文件中添加 “QT += network”
2.使用VS開發時,需要在“依賴項”中添加Qt5Networkd.lib(debug模式)或者Qt5Network.lib(release模式)。使用時要注意頭文件QtNetwork的位置。

UDP模式
1、UDP是一種基於無連接的、不可靠的數據報傳輸協議。
2、Datagram(數據報)放在Socket(套接字)中進行網絡傳輸。
2、套接字可以當作一種輸入輸出設備,QUdpSocket可以調用writeDatagram()和readDatagram()對套接字進行讀寫;每當一次數據報寫入完成後會釋放bytesWritten()信號。
3、QUdpSocket在讀之前要先調用bind()函數進行綁定,如果僅僅只是寫的話則無需綁定。
4、當有數據報可讀時,QUdpSocket會發出readyRead()信號,可以通過定義關聯該信號的槽函數,對數據進行讀取。此時hasPendingDatagrams()也會返回true,pendingDatagramSize()可以用於獲取數據報長度,然後調用讀函數進行數據的讀取。

udp發送端:假如要將string Msg的信息發送出去

#include <QtNetwork>    //<QtNetwork/QtNetwork>

QUdpSocket *Sender = new QUdpSocket;    //套接字
QByteArray Datagram;                    //數據報
Datagram.append(Msg);                   //將信息寫入數據報

//將數據報寫入套接字並使用UDP廣播的形式發出
Sender->writeDatagram(Datagram,QHostAddress::Broadcast,6665);

//或者指向特定IP發出
Sender->writeDatagram(Datagram,QHostAddress("10.21.11.66") ,6665);

/* writeDatagram函數原型,發送成功返回字節數,否則返回-1
qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)
qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)
*/

UDP接收端:

#include <QtNetwork>
QUdpSocket *receiver = new QUdpSocket;
//信號槽
private slots:  
    void readPendingDatagrams(); 
receiver->bind(QHostAddress::LocalHost, 6665);//需要設置監聽哪個端口
connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));

void readPendingDatagrams()
 {
     while (receiver->hasPendingDatagrams()) {
         QByteArray datagram;
         datagram.resize(receiver->pendingDatagramSize());
         receiver->readDatagram(datagram.data(), datagram.size());
         //數據接收在datagram裏
/* readDatagram 函數原型
qint64 readDatagram(char *data,qint64 maxSize,QHostAddress *address=0,quint16 *port=0)
*/
     }
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章