Пишу в сокет, но в результате, получаю почему-то при считывании данных с сокета одно и тоже, происходит запись в сокет со стороны клиент за 1 сек примерно 300 раз, на стороне сервера все эти 300 раз отлавливаются, но в данных при readAll одно и тоже
#include "clientwc.h"
static ClientWc *pInstance = 0;
ClientWc::ClientWc(QObject *parent):
QObject(parent),
config(new Utils::Config::ConfigFile("../../config/client.ini"))
{}
ClientWc *ClientWc::getInstance()
{
if(!pInstance)
pInstance = new ClientWc();
return pInstance;
}
void ClientWc::writeSocket(const QByteArray &data)
{
_data = data;
if(_sockets.find(_data)==_sockets.end())
{
_sockets[_data] = new QTcpSocket(this);
connect(_sockets[_data],SIGNAL(readyRead()),this,SLOT(onReadyRead()),Qt::DirectConnection);
connect(_sockets[_data],SIGNAL(connected()),this,SLOT(onSockedSend()),Qt::DirectConnection);
connect(_sockets[_data],SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onHandlerError(QAbstractSocket::SocketError)),Qt::DirectConnection);
connect(_sockets[_data],SIGNAL(disconnected()),_sockets[_data],SLOT(deleteLater()));
_sockets[_data]->connectToHost( config->getOption<QString>("host"),
config->getOption<QString>("port").toInt());
}
}
void ClientWc::onHandlerError(QAbstractSocket::SocketError error)
{
LOGE()<<"Error handler socket with error"<<error;
QTcpSocket *tcpSocket = (QTcpSocket*)sender();
if(tcpSocket)
{
QByteArray key = _sockets.key(tcpSocket);
tcpSocket->disconnectFromHost();
_sockets.remove(key);
}
}
void ClientWc::onReadyRead()
{
QTcpSocket *tcpSocket = (QTcpSocket*)sender();
if(!tcpSocket || !tcpSocket->isValid())
{
LOGE()<<"Error read socket";
return ;
}
QByteArray clientDate = tcpSocket->readAll();
QByteArray key = _sockets.key(tcpSocket);
tcpSocket->disconnectFromHost();
_sockets.remove(key);
emit received(clientDate);
}
void ClientWc::onSockedSend()
{
QTcpSocket *tcpSocket = (QTcpSocket*)sender();
if(!tcpSocket || !tcpSocket->isValid())
{
LOGE()<<"Error write socket";
return ;
}
if(-1==tcpSocket->write(_data))
{
LOGE()<<"Error write data in socket";
}
}
ClientWc::~ClientWc()
{
if(_sockets.size())
{
for(QMap<QByteArray,QTcpSocket *>::iterator it = _sockets.begin();
it!=_sockets.end(); ++it)
{
it.value()->disconnectFromHost();
}
_sockets.clear();
}
}
на стороне сервера так :
void ServerWc::incomingConnection()
{
while(_serv->hasPendingConnections())
{
QTcpSocket *socket = _serv->nextPendingConnection();
LOGI()<<(void*)socket;
if(socket && socket->isValid())
{
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
connect(socket,SIGNAL(disconnected()),socket,SLOT(deleteLater()));
}
}
}
void ServerWc::readyRead(){
QObject * object = QObject::sender();
if( !object )
return ;
QTcpSocket *socket = static_cast<QTcpSocket *>(object);
if(!socket || !socket->isValid())
{
LOGE()<<"Error get socket";
return ;
}
QByteArray clientDate = socket->readAll();
ClientHandler *handler = new ClientHandler(clientDate,socket,this);
connect(handler,SIGNAL(handlerComplete(QTcpSocket*,QByteArray)),this,SLOT(writeSocket(QTcpSocket*,QByteArray)));
handler->run();
}