Hi,
I am developing a plugin for to transfer a XML file over Http protocol on top of the TCP layer.
I am Able to send the XML body from Client to the Server using Networkaccessmanager and I can able to receive both the header and body at server.
But the issue is am getting an error saying "Connection Closed" from the NetworkReply Even though all my data is transferred to the server.
And also sometimes Server will get called 2 times also for the same Build.
and also sometimes at server side, data will not be received .
Please check my code below.
/* Client_cs.cpp */
{ qDebug() <<"data starting";
client_socket.connectToHost("127.0.0.1", 80);
connect(&client_socket, SIGNAL(connected()), this, SLOT(startTransfer()));
}
Client_CS::~Client_CS()
{}
void Client_CS::startTransfer()
{ QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart filePart;
filePart.
setHeader(QNetworkRequest
::ContentTypeHeader,
QVariant("text/xml"));
filePart.
setHeader(QNetworkRequest
::ContentDispositionHeader,
QVariant("form-data; filename=\"text\""));
if ( !file->exists() )
{ qDebug() << "File Does not exist";
}
filePart.setBodyDevice(file);
file->setParent(multiPart);
multiPart->append(filePart);
QUrl url
("http://127.0.0.1:80");
QNetworkRequest request(url);
pManager = new QNetworkAccessManager();
pReply = pManager->post(request, multiPart);
multiPart->setParent(pReply);
QObject::connect(pReply,
SIGNAL(finished
()),
this,
SLOT(replyFinished
()));
// here is the issue client_socket.close();
}
void Client_CS::replyFinished()
{ if ( pReply->error() > 0 )
{ qDebug() << "Error occurred: " << pReply->error() << " : " << pReply->errorString();
}
else
{ qDebug() << "Upload success";
}
pReply->deleteLater();
}
Client_CS::Client_CS(QObject* parent): QObject(parent)
{ qDebug() <<"data starting";
client_socket.connectToHost("127.0.0.1", 80);
connect(&client_socket, SIGNAL(connected()), this, SLOT(startTransfer()));
}
Client_CS::~Client_CS()
{}
void Client_CS::startTransfer()
{ QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart filePart;
filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/xml"));
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; filename=\"text\""));
QFile *file = new QFile(xmllink);
if ( !file->exists() )
{ qDebug() << "File Does not exist";
}
file->open(QIODevice::ReadOnly);
filePart.setBodyDevice(file);
file->setParent(multiPart);
multiPart->append(filePart);
QUrl url("http://127.0.0.1:80");
QNetworkRequest request(url);
pManager = new QNetworkAccessManager();
pReply = pManager->post(request, multiPart);
multiPart->setParent(pReply);
QObject::connect(pReply, SIGNAL(finished()),this, SLOT(replyFinished())); // here is the issue
client_socket.close();
}
void Client_CS::replyFinished()
{ if ( pReply->error() > 0 )
{ qDebug() << "Error occurred: " << pReply->error() << " : " << pReply->errorString();
}
else
{ qDebug() << "Upload success";
}
pReply->deleteLater();
}
To copy to clipboard, switch view to plain text mode
/* Server_CS.cpp */
{
qDebug() << "server initiated";
cs_server.listen(hostadd, 80);
connect(&cs_server, SIGNAL(newConnection()),this, SLOT(acceptConnection()));
}
Server_CS::~Server_CS()
{
cs_server.close();
}
void Server_CS::acceptConnection()
{
qDebug() << "server got new connection";
_cs_Socket = cs_server.nextPendingConnection();
connect(_cs_Socket, SIGNAL(readyRead()),this, SLOT(startRead()));
}
void Server_CS::startRead()
{
qDebug() << "server started reading the data received";
buffer = _cs_Socket->read(_cs_Socket->bytesAvailable());
qDebug() <<"value read from the port is :"<< buffer ;
// _handleIncomingData(buffer);
_cs_Socket->close();
}
Server_CS::Server_CS(QObject* parent): QObject(parent)
{
qDebug() << "server initiated";
QHostAddress hostadd(QHostAddress::Any);
cs_server.listen(hostadd, 80);
connect(&cs_server, SIGNAL(newConnection()),this, SLOT(acceptConnection()));
}
Server_CS::~Server_CS()
{
cs_server.close();
}
void Server_CS::acceptConnection()
{
_cs_Socket = new QTcpSocket(this);
qDebug() << "server got new connection";
_cs_Socket = cs_server.nextPendingConnection();
connect(_cs_Socket, SIGNAL(readyRead()),this, SLOT(startRead()));
}
void Server_CS::startRead()
{
qDebug() << "server started reading the data received";
QByteArray buffer;
buffer = _cs_Socket->read(_cs_Socket->bytesAvailable());
qDebug() <<"value read from the port is :"<< buffer ;
// _handleIncomingData(buffer);
_cs_Socket->close();
}
To copy to clipboard, switch view to plain text mode
/* main.cpp */
int main(int argc, char *argv[])
{
Server_CS server;
Client_CS client;
return a.exec();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Server_CS server;
Client_CS client;
return a.exec();
}
To copy to clipboard, switch view to plain text mode
The error output am getting is
Error occured: 2 : "Connection closed"
Please give me some suggestion to resolve this issue.
Thank you
Bookmarks