回复: 使用QTcpSocket对象write出现段错误
#6 [介农酥 05-14 16:50]
终于知道答案了,已在自己电脑上验证。
如果要想nextPendingConnection返回不为空,就不能重写虚函数incomingConnection(),否则就会返回空,所以如果想获得QTcpSocket队列,就无法使用incomingConnection()。且nextPendingConnection()不能连续调用两次,第二次返回空;
#7 回 介农酥 的帖子 [angelus 05-16 08:57]
介农酥:终于知道答案了,已在自己电脑上验证。
如果要想nextPendingConnection返回不为空,就不能重写虚函数incomingConnection(),否则就会返回空,所以如果想获得QTcpSocket队列,就无法使用incomingConnection()。且nextPendingConnection()不能连续调用两次,第二次返回空; (2019-05-14 16:50)
重写了incomingConnection()肯定会错啊,因为重写后就不会创建socket,而是只创建一个socket描述符id,用来延后在线程中创建socket 用,net函数返回的socket是不能在分线程中使用的
#8 回 angelus 的帖子 [介农酥 05-16 12:32]
angelus:重写了incomingConnection()肯定会错啊,因为重写后就不会创建socket,而是只创建一个socket描述符id,用来延后在线程中创建socket 用,net函数返回的socket是不能在分线程中使用的 (2019-05-16 08:57)
但是最终的问题还是没有解决,因为返回的对象指针不能在线程中使用,当我在线程中收到线程发过来的内容之后,我需在该线程中遍历其他socket,将内容发给其他客户端,但是却不能。困扰很久,还望高人指点。
#9 [angelus 05-16 13:22]
链接:https://pan.baidu.com/s/1jyspf_pfiLHVBSDfFi6TZQ
提取码:uj32
这个是前几年写的一个教学用的程序,里边涉及了一个简单的聊天软件
关于多线程 , 加密 , 群发和定向私聊的功能,很简单
你说的问题,可以在里边找到答案,不懂的可以回帖问我
#10 回 介农酥 的帖子 [angelus 05-16 13:34]
介农酥:但是最终的问题还是没有解决,因为返回的对象指针不能在线程中使用,当我在线程中收到线程发过来的内容之后,我需在该线程中遍历其他socket,将内容发给其他客户端,但是却不能。困扰很久,还望高人指点。 (2019-05-16 12:32)
思路其实很简单,把存储用户的socket指针存储到 静态容器中,然后加入锁,读写容器的时候加锁,在线程中是可以访问静态变量的,从中取出指针,然后调用指针中类的方法发送数据就行
容器推荐用QHash进行键值对存储,原则上来说 15万个 值,读的速度大概是查找1万个值,用时1毫秒 , QMap是4毫秒,这种速度,锁在读的时候反而是种累赘,但是写一定是要加锁的!