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
Capture.jpg
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(readFromClient()));
connect(socket,SIGNAL(disconnected()),this,SLOT(closeSocket()));
}
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);
}
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(readFromClient()));
connect(socket,SIGNAL(disconnected()),this,SLOT(closeSocket()));
}
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);
}
To copy to clipboard, switch view to plain text mode
Client code:
connect(m_socket,SIGNAL(connected()),this,SLOT(msgBoxConnected()));
connect(ui->pushButton_connect,SIGNAL(clicked()),this,SLOT(connectToServer()));
connect(ui->pushButton_disconnect,SIGNAL(clicked()),this,SLOT(disconnectFromServer()));
connect(ui->pushButton_send,SIGNAL(clicked()),this,SLOT(sendMessage()));
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(readData()));
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());
}
m_socket = new QTcpSocket(this);
connect(m_socket,SIGNAL(connected()),this,SLOT(msgBoxConnected()));
connect(m_socket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(socketError(QAbstractSocket::SocketError)));
connect(ui->pushButton_connect,SIGNAL(clicked()),this,SLOT(connectToServer()));
connect(ui->pushButton_disconnect,SIGNAL(clicked()),this,SLOT(disconnectFromServer()));
connect(ui->pushButton_send,SIGNAL(clicked()),this,SLOT(sendMessage()));
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(readData()));
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());
}
To copy to clipboard, switch view to plain text mode
Have any idea?
Bookmarks