我从上周开始就在找qt的多线程网络通信,结果网上都是啥,有的就是纯理论,有的就是很简单的一对一,最好的就是我找到的伪多线程通信,为什么说它是接近的呢,因为它的开socket是多线程的,但是收发是单线程的,也就是说服务端只能收,客户端只能发,我在此基础上改造了一下,变成了也能同时收发的,我感觉这个例子就比较全了。
我用https://github.com/licongxing/WinIPC_Socket_Tcp这个例子作为基础来改的,因为这个多线程demo应该是最好的了我感觉。
结构讲解:
1、这个原来代码是通过开socket的多线程来与多个客户端来进行连接。注意他的信号与槽。
第一个信号与槽是接受从mSocketThread线程传下来的值,后面的[=]是qt 的第五类重载,也就是说,接收到isMsg()传出来的值,就在listview上面显示出来
第二个是界面往线程传值,他的Wight的isSend信号是绑定在按键槽上的,当按下发送按键,emit出去这个信号,在mSocketThread上面的dealMsg函数去接收,
2、它的这个socket函数是与对应的客户端进行通信,然后又开了一个线程MsgThread去接收客户端发来的信息,而且这个MsgThread的里面是有回应的send函数,就相当于再发客户端进行一次响应,我把这块删除了,变得更加独立。
所以我自己有写了一个发送的函数,并且开了一个线程SendThread来进行发送,注意最后一个connect,最后面加了一个
Qt::DirectConnection