求助,关于UDP读取数据的问题

shadowofglare 2017-10-29 02:57:23
接收端读取:

#include <QtNetwork>

QUdpSocket *receiver;



//信号槽

private slots:

void readPendingDatagrams();

receiver = new QUdpSocket(this);

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)

*/

}

}
这段我写完能运行,但是我不清楚datagram中的data哪里来的?他只用了一个resize方法啊....

...全文
544 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowofglare 2017-10-29
  • 打赏
  • 举报
回复
引用 1 楼 tajon1226 的回复:
connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams())); 你这里不是连接了信号和槽了吗,这段代码的意思是receiver socket对应的缓冲区里有数据来了,会激发一个信号,回调你的槽函数readPendingDatagrams。 然后你就可以使用readDatagram这个函数从系统的缓冲区里把socket数据copy到你自己的缓冲区。 建议看下win32编程,大概了解下消息机制和udp编程。
明白了,谢谢提醒!
走好每一步 2017-10-29
  • 打赏
  • 举报
回复
resize只是根据系统socket缓冲区数据大小,更改下自己缓冲区的大小而已。
走好每一步 2017-10-29
  • 打赏
  • 举报
回复
connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams())); 你这里不是连接了信号和槽了吗,这段代码的意思是receiver socket对应的缓冲区里有数据来了,会激发一个信号,回调你的槽函数readPendingDatagrams。 然后你就可以使用readDatagram这个函数从系统的缓冲区里把socket数据copy到你自己的缓冲区。 建议看下win32编程,大概了解下消息机制和udp编程。

16,239

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧