PDA

View Full Version : Server sends me empty message



Higgs
21st July 2014, 12:47
Hi all.
I'm writting client-server chat application. Client have disconnect button,when I disconnect connection between client and server and then I again click connect button everything works well but when I sends server message to client,server message sends 2 message:

1. actual message which I want to send
2. empty message

I ca't figure out what can be wrong with my code

picture of both
10521

server code(important functions only)


void Server::listenTo()
{
bool result = server->listen(QHostAddress(ui->lineEdit_ipaddress->text()),ui->lineEdit_port->text().toInt());
if(!result){
labelText(ui->label_status,"Can't listen",Qt::red);
return;
}

labelText(ui->label_status,"Listening...",Qt::green);
changeButtonStates(false,false,false);
}
void Server::disconnectFromClient()
{
if(socket != nullptr && socket->isOpen())
socket->close();
labelText(ui->label_status,"Listening...",Qt::green);
changeButtonStates(false,false,false);
}
void Server::sendMessage()
{
if(socket != nullptr && socket->isOpen()){
socket->write(qPrintable(ui->textEdit_msgArea->toPlainText()));

ui->textEdit_chat->append("<Server>: " + ui->textEdit_msgArea->toPlainText());
ui->textEdit_msgArea->clear();
}
}
void Server::newClient()
{
socket = server->nextPendingConnection();
labelText(ui->label_status,"Connected to client",Qt::green);
changeButtonStates(false,true,true);

connect(socket,SIGNAL(readyRead()),this,SLOT(readF romClient()));
connect(socket,SIGNAL(disconnected()),this,SLOT(cl oseSocket()));
}
void Server::readFromClient()
{
QString clientMessage = socket->readAll();
ui->textEdit_chat->append("<Client>: " + clientMessage);
}
void Server::closeSocket()
{
socket->close();
changeButtonStates(false,false,false);
labelText(ui->label_status,"Listening...",Qt::green);
}


Client code:


m_socket = new QTcpSocket(this);
connect(m_socket,SIGNAL(connected()),this,SLOT(msg BoxConnected()));
connect(m_socket,SIGNAL(error(QAbstractSocket::Soc ketError)),this,SLOT(socketError(QAbstractSocket:: SocketError)));
connect(ui->pushButton_connect,SIGNAL(clicked()),this,SLOT(con nectToServer()));
connect(ui->pushButton_disconnect,SIGNAL(clicked()),this,SLOT( disconnectFromServer()));
connect(ui->pushButton_send,SIGNAL(clicked()),this,SLOT(sendMe ssage()));

void Client::connectToServer()
{
m_socket->connectToHost(QHostAddress(ui->lineEdit_ipaddress->text()),ui->lineEdit_port->text().toInt());
}

void Client::disconnectFromServer()
{
m_socket->close();
changeButtonsState(true,false,false);
labelText(ui->label_status,"status",Qt::black);


}

void Client::sendMessage()
{
ui->txtEdit_chat->append("<Client>: " + ui->textEdit_msgArea->toPlainText());

m_socket->write(qPrintable(ui->textEdit_msgArea->toPlainText()));
ui->textEdit_msgArea->clear();
}
void Client::msgBoxConnected()
{
connect(m_socket,SIGNAL(readyRead()),this,SLOT(rea dData()));
labelText(ui->label_status,"connected",Qt::green);

changeButtonsState(false,true,true);
}
void Client::readData()
{
msgbox("readData called");
ui->txtEdit_chat->append("<Server>: " + m_socket->readAll());
}


Have any idea? :)

Lesiok
21st July 2014, 12:54
Where You disconnect readyRead() signal from readData() slot after socket closing ?

Higgs
21st July 2014, 14:10
thank you so much :) :)
I didn't call disconnect function after socket closing.