admin管理员组

文章数量:1642199

        如果建立tcp连接的套接字所在的线程是A,然后你通过B线程调用了这个已经建立连接的套接字,这种情况在Qt中会发现是write()函数返回发送的数据字节数量,但是接收端却收不到数据,并且导致已经连接的套接字不可以再发送数据了

调试过程在输出窗口会看到提示:

QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread

如果是使用udp通信,那么在另一线程调用套接字发送数据是不存在这种情况的

那么解决方式就是,将发送数据的过程转移到建立套接字连接的线程中

第一种:通过信号和槽连接的第五个参数,将执行发送的过程转移到正确发送的线程

第二种:直接将连接的QTcpSocket对象在子线程中创建

第三种:调用udpSocket->write()函数之后,再调用udpSocket->flush()这样也可以发送成功

        另外在Qt通过信号槽传递字节数组时候最好使用QByteArray类型,而不要使用char*类型作为信号槽的传递参数,不然有时候会发现槽函数接收到的数据和信号发送的数据不一致

本文标签: notifiersSocketQSocketNotifierthreaddisabled