C++ QUdpSocket:无法接收数据报
我使用QUdpSocket从服务器接收数据。当我使用SFML接收数据时,它工作正常,我可以通过SocketUdp接收数据,但使用qt它不工作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;
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会立即在其中设置。请参见: