QT之UDP和組播的使用

2021-08-02 16:30:42 字數 1875 閱讀 6870

先簡單說下udp,因為組播也是udp的,用udp的比較方便的一種面向無連線的方式,只要繫結本地埠,跟伺服器發個信令通知告訴ip和埠,就可以接收伺服器端的資料了,但是存在最多的問題就是丟包和亂序,先看下簡單udp的連線。

qudpsocket *revwbudp;

revwbudp =

new qudpsocket;

bool result = revwbudp->bind(localport,qudpsocket::shareaddress

|qudpsocket::reuseaddresshint);

if(result)

{ revwbudp->setsocketoption(qabstractsocket::receivebuffersizesocketoption,1024

*1024

*8);//設定緩衝區

//連線接收訊號槽

connect(revwbudp,signal(readyread()),this,slot(datareceived()));

qbytearray line;

line.resize(2);

line[0]

= 0x02;

line[1

]= 0x7d;

revwbudp->writedatagram(line.data() , qhostaddress(serverip),serverport);

資料等待接收:

void datareceived()

{ while (revwbudp->haspendingdatagrams())

{qbytearray datagram;

datagram.resize(revwbudp->pendingdatagramsize());

revwbudp->readdatagram(datagram.data

(),datagram.size());

qdebug()<

<

斷開revwbudp->disconnected();

delete revwbudp;

revwbudp = nullptr;

完畢

接下來說說組播

因為之前一直聽說組播,也沒有實際用過,組播的原理大致就是伺服器往某一組播位址和埠發資料,之後客戶端從指定的組播位址和埠去取資料,好處就是減輕了伺服器傳送的壓力,弊就是只要是加入到組播組的使用者都可以收到改資料,如果往同一組播位址和埠傳送資料的話,可能會引起風暴。

具體**如下:

qudpsocket *revwbudp;

revwbudp =

new qudpsocket;

//繫結本地埠

revwbudp->bind(qhostaddress::anyipv4, multicastport, qudpsocket::shareaddress);

//加入組播組

bool result = revwbudp->joinmulticastgroup(qhostaddress(multicastip));

if(result)

{ //設定緩衝區

revwbudp->setsocketoption(qabstractsocket::receivebuffersizesocketoption,1024

*1024

*8);

//連線接收訊號槽

connect(revwbudp,signal(readyread()),this,slot(datareceived()));

其餘操作跟普通udp連線類似 完畢

QT之UDP和組播的使用

先簡單說下udp,因為組播也是udp的,用udp的比較方便的一種面向無連線的方式,只要繫結本地埠,跟伺服器發個信令通知告訴ip和埠,就可以接收伺服器端的資料了,但是存在最多的問題就是丟包和亂序,先看下簡單udp的連線。qudpsocket revwbudp revwbudp new qudpsock...

UDP的組播與多播

在前面已經記錄過udp的單播模式,即客戶端只能與服務端單獨對接。接下來介紹udp的另外兩種通訊方式 udpsocket newqudpsocket this udpsocket bind qhostaddress 192.168.1.100 45454 qbytearray datagram mul...

UDP通訊的點播 組播與廣播

一 點播客戶端 傳送方 標頭檔案 ifndef mainwindow h define mainwindow h include include namespace ui class mainwindow public qmainwindow endif mainwindow h點播客戶端 傳送方 ...