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

时间:2017-05-01 13:32:52

标签: multithreading qt sockets udp

使用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)?

如果我键入netstat -an |在cmd中找到“UDP”,我可以在服务器可用时查看。

0 个答案:

没有答案