首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUdpSocket:无法接收数据报

QUdpSocket:无法接收数据报
EN

Stack Overflow用户
提问于 2012-12-08 09:02:27
回答 2查看 4.2K关注 0票数 3

我使用QUdpSocket是为了从服务器接收数据。当我使用SFML接收数据时,我可以通过SocketUdp接收数据,但使用qt则不起作用。

代码语言:javascript
复制
void TheClass::Bind()
{
  m_sock_receive = new QUdpSocket(this);
  if (m_sock_receive->bind(QHostAddress::Any, port))
  {
    std::cout << "Bind: OK" << std::endl;
    connect(m_sock_receive, SIGNAL(readyRead()), this, SLOT(QtReceive()));
  } 
  else
      std::cout << "Bind: NOK" << std::endl;
}

void TheClass::QtReceive()
{
    std::cout << "Pending data !" << std::endl;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-08 09:51:01

我会在绑定前进行连接。在绑定之后,readyRead可能会在连接调用完成之前触发。如果不清空挂起的数据报,readyRead将不会再次触发。

票数 2
EN

Stack Overflow用户

发布于 2013-11-24 23:48:07

为了将信号(readyRead())连接到任何插槽,QUdpSocket必须位于QAbstractSocket::状态中。尽管在连接之前调用了bind,但QUdpSocket上的bind会进行非阻塞调用,这意味着绑定可能会延迟。要确保在绑定完成且QUdpSocket处于绑定状态后将信号(readyRead())连接到插槽(QtReceive()),请执行以下操作:

代码语言:javascript
复制
void TheClass::Bind()
{
  m_sock_receive = new QUdpSocket(this);
  connect(m_sock_receive, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
        this, SLOT(onSocketStateChange(QAbstractSocket::SocketState)));
  if (m_sock_receive->bind(QHostAddress::Any, port))
  {
    std::cout << "Bind: OK" << std::endl;
  } 
  else
      std::cout << "Bind: NOK" << std::endl;
}

void TheClass::QtReceive()
{
    std::cout << "Pending data !" << std::endl;
}

void TheClass::onSocketStateChange (QAbstractSocket::SocketState state) {
    if ( state == QAbstractSocket::BoundState ) {
        connect(m_sock_receive, SIGNAL(readyRead()), this, SLOT(QtReceive()));
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13773374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档