Multithreading Udp服务器和Qt,确定套接字是否可用的可靠方法
使用Qt,我试图连接到本地udp套接字。 我所面临的是一个小问题,但我希望它能妥善解决它,以及未来的项目。 核心软件分为主线程和次线程,主线程初始化连接,次线程在启动第三方进程(另一个应用程序)时发出信号,让主线程尝试连接到该进程托管的服务器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
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函数,因此第二个线程识别第三个应用程序已启动。