• 11664阅读
  • 4回复

请教一个QTcpServer的多客户端连接的问题 [复制链接]

上一主题 下一主题
离线gemscorpio
 

只看楼主 倒序阅读 楼主  发表于: 2009-02-23
— 本帖被 XChinux 执行加亮操作(2009-02-23) —
当多个客户端跟QTcpServer连接的时候,某个客户端跟服务器发送消息,我要怎么取得当前发送消息的QTcpSocket连接。
离线gemscorpio

只看该作者 1楼 发表于: 2009-02-23
除了用多线程,就没其它办法了吗?
离线XChinux

只看该作者 2楼 发表于: 2009-02-23
写这类程序的步骤
1、接收QTcpServer部件的newConnection()信号,将进入来的QTcpSocket的指针获取到,然后将这个QTcpSocket部件的readyRead()、disconnect()等信号链接到另外的slot函数中,比如称作onReadyRead(), onDisconnected()
2、在onReadyRead()或onDisconnected()函数中,用sender()函数获取到发送信号的QTcpSocket部件,比如:
QTcpSocket *socket = qobject_cast<QTcpSocet *>(sender());
获取到了与代表与某个客户端连接的QTcpSocket对象指针后,就可以对其进行其它操作了,比如要读数据、写数据、关闭等。
如果想主动发送一些信息,则需要你自己分类记忆索引记忆进入到的QTcpSocket对象指针列表,以方便操作,当然了,从QTcpServer对象的方法中可以获取到当前正在连接的所有QTcpSocket对象指针列表。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线gemscorpio

只看该作者 3楼 发表于: 2009-02-24
谢谢版主,呵呵!
离线韩某某
只看该作者 4楼 发表于: 2011-02-20
回 2楼(XChinux) 的帖子
请教版主:
QTcpSocket 的nextPendingConnection()函数到底返回的是哪个tcp套接字?(我的理解是下一个连接成功的套接字)如果按我的理解,为什么在用下面代码时却接收不到数据?
newConnection信号关联下面两句代码:
QTcpSocket *tcpSocket = tcpServer.nextPendingConnection();
connect(tcpSocket ,SIGNAL(readyRead()),this,SLOT(readClient()));(readClient()函数里面直接用tcpSocket读取数据的)

按你的那种方法改了readClient()函数后(用sender()获取),就能够接受到数据了,我想知道这里面的深层次原因,请教版主了

ps:我的服务器程序是接受很多的客户端连接,但没有用多线程
快速回复
限100 字节
 
上一个 下一个