• 4523阅读
  • 7回复

关于tcpServer典型例子使用的一个问题,另举例 [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2010-03-06
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
关于tcpServer典型例子使用的一个问题,以下是典型例子中的关键代码部分,大家应该看得明白的

connect(this->tcpServer,SIGNAL(newConnection()),this,SLOT(AcceptConnection()));

void MTcpServer::AcceptConnection()                  //接收连接
{this->tcpSocket=this->tcpServer->nextPendingConnection();
connect(this->tcpSocket,SIGNAL(readyRead()),this,SLOT(ReadTcpSocket()));}

void MTcpServer::ReadTcpSocket()            //读取数据
{  this->tcpSocket->readAll();}


我的问题是,当有很多连接请求在某一较短的时间段出现时,以上代码不会出现错误吗?

举例:

假设已经建立起套接字A,B和C,同时处于连接状态中....而且是长时间的连接,短时间内不会断开

如果某个时刻this->tcpSocket指向套接字B(我们知道不可能同时指向两个套接字的),

而套接字A或者C此时有数据来了,触发槽函数去读取this->tcpSocket指向的套接字的数据,

由于此时this->tcpSocket指向套接字B,也就是说A或者C有数据来了,却触发槽函数去读取B的数据?
[ 此帖被iiiyyyhhhsss在2010-03-06 21:01重新编辑 ]
离线iiiyyyhhhsss

只看该作者 1楼 发表于: 2010-03-06
我举的例子所描述的过程有没有错误?错误的地方在哪里?
离线iiiyyyhhhsss

只看该作者 2楼 发表于: 2010-03-06
有没有人知道我举的例子如何解释?是不是有什么地方我想漏了?
离线dbzhang800

只看该作者 3楼 发表于: 2010-03-06
有没有人知道我举的例子如何解释?是不是有什么地方我想漏了?

在这条语句上。
this->tcpSocket=this->tcpServer->nextPendingConnection();


举例:

假设已经建立起套接字A,B和C,同时处于连接状态中....而且是长时间的连接,短时间内不会断开

如果某个时刻 this->tcpSocket指向套接字B(我们知道不可能同时指向两个套接字的),


显然你需要一个数组或list之类的,或者直接
this->tcpSocketA
this->tcpSocketB
this->tcpSocketC
离线iiiyyyhhhsss

只看该作者 4楼 发表于: 2010-03-06
引用第3楼dbzhang800于2010-03-06 23:17发表的  :
显然你需要一个数组或list之类的,或者直接
this->tcpSocketA
this->tcpSocketB
.......



但是问题是,Qt自带的例子里没有这样用啊

它的例子都是只有一个this->tcpSocket,就可以处理很多连接...为什么呢?

我怀疑只需要一个就行,是不是Qt内部做了什么动作我们是不知道的?
离线iiiyyyhhhsss

只看该作者 5楼 发表于: 2010-03-07
有没有人能解释清楚呢?
离线yb824
只看该作者 6楼 发表于: 2010-03-08
如果server需要主动向client发送数据应该要保存每个client socket,不然你怎么知道往哪里发,如果只是客户端有数据来然后回复
,可以通过Sender()函数就可以得client socket,然后发送数据。
离线cksckb
只看该作者 7楼 发表于: 2010-04-25
哪一個QT自帶的例子有處理多個連接的呢
我看簡單的例子都是直接斷掉再重連
是否可以請樓主po出來呢
快速回复
限100 字节
 
上一个 下一个