原因是我在线程中使用了waitForBytesWritten,这个函数进行写的时候,会先关闭socket,然后再打开
而在线程的run函数中,我使用了exec,添加了一个事件循环
在线程的构造函数中,我将socket的一些函数connect在一起
由于waitforbytewritten的原因,会禁用socket一段事件,导致exec事件循环找不到触发事件
这三处冲突,导致socket notifiers cannot be disabled from another thread
目标,qt程序作为客户端,windows下winsock作为服务器端,实现两端通信。
开始时写了一个小函数测试:
view plaincopy to clipboardprint?
QTcpSocket tmpSock;
tcpSock.connectToHost("59.64.159.87",7716);
tcpSock.write(buf,strlen(buf)+1);
msleep(3000);
tcpSock.disconnect();
测试结果发现客户端只能连接到服务器端,而服务器端收不到客户端的消息。
初步揣测也许是Qt的socket机制使得socket缓冲队列没有即时发送。
换另一方法:
view plaincopy to clip