Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QUdpSocket:无法接收数据报_C++_Qt_Sockets_Udp_Sfml - Fatal编程技术网

C++ QUdpSocket:无法接收数据报

C++ QUdpSocket:无法接收数据报,c++,qt,sockets,udp,sfml,C++,Qt,Sockets,Udp,Sfml,我使用QUdpSocket从服务器接收数据。当我使用SFML接收数据时,它工作正常,我可以通过SocketUdp接收数据,但使用qt它不工作 void TheClass::Bind() { m_sock_receive = new QUdpSocket(this); if (m_sock_receive->bind(QHostAddress::Any, port)) { std::cout << "Bind: OK" << std::endl;

我使用QUdpSocket从服务器接收数据。当我使用SFML接收数据时,它工作正常,我可以通过SocketUdp接收数据,但使用qt它不工作

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;
}
void TheClass::Bind()
{
m_sock_receive=新的QUdpSocket(此);
if(m_sock_receive->bind(QHostAddress::Any,port))
{

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

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

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()));
    }
}
void TheClass::Bind()
{
m_sock_receive=新的QUdpSocket(此);
连接(m_sock_receive,信号(stateChanged(QAbstractSocket::SocketState)),
这个插槽(onSocketStateChange(QAbstractSocket::SocketState));
if(m_sock_receive->bind(QHostAddress::Any,port))
{

std::cout读取QT 4.8.6源代码我发现如果bind()函数成功,BoundState会立即在其中设置。请参见: