1.UDP的工作原理
客户端向服务端发送一段请求报文,报文大小与各个系统的协议实现有关,但不能超过下层IP协议规定的64KB;
服务端同样以报文的形式作出响应,如果服务端没有收到请求,则不会作出回应,客户端也不会重新发送,所以报文传输的可靠性不高。
2. 实例
服务端:
port=5555;//设置UDP的端口,服务端定时向此端口发送广播
udpSocket = new QUdpSocket(this);//创建socket对象
timer = new QTimer(this);
//定时发送广播消息
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
//判断是否发送成功,成功返回报文长度,失败返回-1
if((lenght=udpSocket->writeDatagram(msg.toLatin1(),
msg.length(),QHostAddress::Broadcast,port))!=msg.length()){//QHostAddress::Broadcast指定向广播地址发送
return;
}
客户端:
port = 5555; //设置UDP的端口号参数,指定在此端口上监听数据
udpSocket = new QUdpSocket(this);
//QUdpSocket是一个I/O设备,当有数据到大I/O设备时,发出readyRead()信号。
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
bool result = udpSocket->bind(port);//绑定端口
if(!result){
QMessageBox::information(this,tr("error"),tr("udp socket create error!"));
return;
}
while(udpSocket->hasPendingDatagrams()){//判断socket中有没有可读的数据报
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(),datagram.size());//读取第一个数据报
QString msg = datagram.data();
ReceiveTextEdit->insertPlainText(msg);//将读取的数据报显示的控件上
}
主要还是参考了一些Demo,大概意思就是这样。
目的是为了记录自己的学习状态。
如有错误,烦请各位大佬多多指正。