Multithreading Udp服务器和Qt,确定套接字是否可用的可靠方法

Multithreading Udp服务器和Qt,确定套接字是否可用的可靠方法,multithreading,qt,sockets,udp,Multithreading,Qt,Sockets,Udp,使用Qt,我试图连接到本地udp套接字。 我所面临的是一个小问题,但我希望它能妥善解决它,以及未来的项目。 核心软件分为主线程和次线程,主线程初始化连接,次线程在启动第三方进程(另一个应用程序)时发出信号,让主线程尝试连接到该进程托管的服务器 void MainWindow::initSocket(){ udpSocket = new QUdpSocket(this); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(rea

使用Qt,我试图连接到本地udp套接字。 我所面临的是一个小问题,但我希望它能妥善解决它,以及未来的项目。 核心软件分为主线程和次线程,主线程初始化连接,次线程在启动第三方进程(另一个应用程序)时发出信号,让主线程尝试连接到该进程托管的服务器

void MainWindow::initSocket(){

    udpSocket = new QUdpSocket(this);
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));

    handshaker s1;
    s1.a= 1;
    s1.b= 1;

    udpSocket->writeDatagram((const char*)&s1, sizeof(s1), QHostAddress::LocalHost, PORT);

    QThread::sleep(1);

    s1.c= 1;

    udpSocket->writeDatagram((const char*)&s1, sizeof(s1), QHostAddress::LocalHost, PORT);
}
基本上发生的情况是,有时信号发出得太快,握手执行得太快(数据包丢失,因为另一端没有服务器),因此连接没有正确建立。 我知道UDP是无连接的,但是否有可靠的方法来理解接收器是否开启(例如ping)


如果我在cmd中键入netstat-an | find“UDP”,我可以明确地看到服务器何时可用。

您显示的代码创建了一个新的
QUdpSocket
,然后立即对其调用
writedagram
。当你说“有时信号发出得太快”时,哪个信号和从哪里发出的?在第二个线程发出信号“thirdapspstarted”(比方说)后调用init函数,因此第二个线程识别第三个应用程序已启动。