找回密码
 立即注册
收起左侧

关于在Qt单线程中建立了多个UDP接口出现莫名错误问题。

1
回复
10262
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2017-2-2 23:56:22 显示全部楼层 |阅读模式
5Qter豆
在创建局域网聊天软件的时候,我为每个用户写了一个ITEM,并把他们统一加入QVector中,然后在每个ITEM中创建了一个UDP接听接口,但是在测试的时候发现了一个问题,
问题如下:QNativeSocketEngine::hasPendingDatagrams() was called in QAbstractSocket::UnconnectedState 不知道是为什么。有网友说是在代码中国提前用了hasPendingDatagrams(),
但是,并没有找到这段疑似提前代码。具体相关代码如下
item中的接听接口
  1. void Person_Item_Widget::setReciveUdpSocket()//创建接通接口
  2. {
  3.     recieveUdpSocket=new QUdpSocket(this);
  4.     recieveUdpSocket->bind(port);
  5.     connect(recieveUdpSocket,SIGNAL(readyRead()),this,SLOT(dataRecieve()),Qt::AutoConnection);
  6. }
  7. void Person_Item_Widget::dataRecieve()//数据持续接收的槽函数
  8. {
  9.     while(recieveUdpSocket->hasPendingDatagrams())
  10.     {
  11.         QString message;
  12.         recieveUdpSocket->readDatagram((char*)&messageinfo,sizeof(messageinfo));
  13.         message=QString(messageinfo.Usermessage);
  14.         messageIines=messageinfo.lines;
  15.         memset(messageinfo.Usermessage,0,sizeof(messageinfo.Usermessage));
  16.         qDebug()<<message;
  17.     }
  18.     emit dataRecieveReturnItemID(userItemID);
  19. }
复制代码

而且在测试中,接通端口只能接听一次,且数据没有成功接听。是不是在这里需要用多线程来实现这个目的,或者是connect的问题。
请教一下大家

回复

使用道具 举报

累计签到:25 天
连续签到:1 天
2017-2-9 08:50:34 显示全部楼层
有没有检测过,bind的时候是否确认成功。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了