网上学习的例子,自己写了个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有什么不同,前者下位机收不到这个命令。而后者可以。