環境:需要使用網絡庫
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)
*/
}
}