首页| 论坛| 消息

标题:请教一个QTcpServer的多客户端连接的问题
作者:gemscorpio
日期:2009-02-23 15:43
内容:

当多个客户端跟QTcpServer连接的时候,某个客户端跟服务器发送消息,我要怎么取得当前发送消息的QTcpSocket连接。


#1 [gemscorpio 02-23 16:45]
除了用多线程,就没其它办法了吗?
#2 [XChinux 02-23 17:37]
写这类程序的步骤
1、接收QTcpServer部件的newConnection()信号,将进入来的QTcpSocket的指针获取到,然后将这个QTcpSocket部件的readyRead()、disconnect()等信号链接到另外的slot函数中,比如称作onReadyRead(), onDisconnected()
2、在onReadyRead()或onDisconnected()函数中,用sender()函数获取到发送信号的QTcpSocket部件,比如:
QTcpSocket *socket = qobject_cast(sender());
获取到了与代表与某个客户端连接的QTcpSocket对象指针后,就可以对其进行其它操作了,比如要读数据、写数据、关闭等。
如果想主动发送一些信息,则需要你自己分类记忆索引记忆进入到的QTcpSocket对象指针列表,以方便操作,当然了,从QTcpServer对象的方法中可以获取到当前正在连接的所有QTcpSocket对象指针列表。
#3 [gemscorpio 02-24 11:58]
谢谢版主,呵呵!
#4 回 2楼(XChinux) 的帖子 [韩某某 02-20 01:48]
请教版主:
QTcpSocket 的nextPendingConnection()函数到底返回的是哪个tcp套接字?(我的理解是下一个连接成功的套接字)如果按我的理解,为什么在用下面代码时却接收不到数据?
newConnection信号关联下面两句代码:
QTcpSocket *tcpSocket = tcpServer.nextPendingConnection();
connect(tcpSocket ,SIGNAL(readyRead()),this,SLOT(readClient()));(readClient()函数里面直接用tcpSocket读取数据的)
按你的那种方法改了readClient()函数后(用sender()获取),就能够接受到数据了,我想知道这里面的深层次原因,请教版主了
ps:我的服务器程序是接受很多的客户端连接,但没有用多线程

回复 发表
主题 版块