先簡單說下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()<<"data ;"
《斷開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點播客戶端 傳送方 ...