• 5997阅读
  • 5回复

qt tcpsocket发送问题 [复制链接]

上一主题 下一主题
离线aishang
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-10
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-03-10) —
        网上学习的例子,自己写了个tcp服务端。服务端一共发送4条命令给客户端读取数据,前面3条都发送成功了,就是第4条不能成功。搞不明白是什么问题了,求救!
QList<ClientSocket*>tcpClientSocketList;
Server::Server(QObject *parent,int port)
        : QTcpServer(parent)
{
    listen(QHostAddress::Any,port);
}

void Server::incomingConnection(int socketDescriptor)
{
    ClientSocket *tcpClientSocket=new ClientSocket(this);
    connect(tcpClientSocket,SIGNAL(disconnect(int)),this,SLOT(slotDisconnected(int)));
    tcpClientSocket->setSocketDescriptor(socketDescriptor);
    tcpClientSocketList.append(tcpClientSocket);
    char data_add[6];
    data_add[0] = 0x03;
    data_add[1] = 0xFF;
    data_add[2] = 0x05;
    data_add[3] = 0x14;
    data_add[4] = RCR_Fun(data_add,0,3);
    data_add[5] = 0x00;
    tcpClientSocket->write(data_add,5);
    qDebug() << tcpClientSocketList.count();
}

void Server::updateClients(QByteArray data,int length)
{
    qDebug() << "very good ";
    qDebug() << tcpClientSocketList.count();
    qDebug() << "very good two ";
    for(int i=0;i<tcpClientSocketList.count();i++)
    {
        ClientSocket *item = tcpClientSocketList.at(i);
        if(item->write(data,data.length()))
        {
            qDebug() <<  data.toHex();
            continue;
        }
    }
}

void Server::PushMessage()
{
    QByteArray data;
    data[0] = 0x03;
    data[1] = SN[0];
    data[2] = 0x06;
    data[3] = 0x05;
    data[4] = 0x01;
    data[5] = RCR_Fun(data,0,4);
    updateClients(data,data.length());
}
不能成功的是void Server::updateClients(QByteArray data,int length)
里面的write。用了抓包工具,发现这个write发送的数据可以抓到,但是好像和void Server::incomingConnection(int socketDescriptor)里面的write有什么不同,前者下位机收不到这个命令。而后者可以。
离线morriszy

只看该作者 1楼 发表于: 2011-03-10
最近在研究TCP/IP,我新手,感觉好难哦,有经验的总结总结呢
VS2010+Qt4.7.0
离线aishang
只看该作者 2楼 发表于: 2011-03-10
来个高手帮忙看下啊!大侠们现身啊!
离线luoyang

只看该作者 3楼 发表于: 2011-03-10
我来帮忙顶一下
离线altqq
只看该作者 4楼 发表于: 2011-03-11
PushMessage在哪里调的
离线aishang
只看该作者 5楼 发表于: 2011-03-11
回 4楼(altqq) 的帖子
PushMessage是在另一个类里面调用的。我是在 ClientSocket里面用按键触发一个槽函数,在槽函数里面调用了Server里面的PushMessage。我自己打印过,点击按键以后代码是正确运行到了void Server::updateClients(QByteArray data,int length)里面的
快速回复
限100 字节
 
上一个 下一个