How to Test Ftp server availability
-
Hi
I have a small requirement as i need to test Ftp availability using QNetworkAccessManager.I was able to transfer file to server.But i need to test availability first and then transfer file..
How do i do that..Can anyone share a part of code or hintsThanks in Advance
Bala Beemaneni -
-
Try something like this:
@ QUrl url("ftp://server/files/jgevas_FTPTest.txt");
url.setUserName("login"); url.setPassword("password"); url.setPort(25); data = new QFile(file, this);
if (data->open(QIODevice::ReadOnly))
reply = manager.put(QNetworkRequest(url), data);@
http://qt-project.org/forums/viewthread/31758
Maybe, you should change the port number.
-
The above example sends the file to an ftp server.My requirement is different.If You are awre of QFtp ,we do connect to host and login in to ftp .I want similar functionality using QNAM.I should just be able to test with the given credentials whether it is accessible or not? How do i that? Hope u understand the requirement now..
Thanks
Bala Beemaneni -
The above example does everything you want, as you get
QNetworkReply reply .In the next step you can do:
@reply.error()@
which yields http://qt-project.org/doc/qt-5/qnetworkreply.html#NetworkError-enum .
-
Hi,
Did you check "authenticationRequired":http://qt-project.org/doc/qt-5/qnetworkaccessmanager.html#authenticationRequired ?
Until valid credentials are given the signal is emitted again and again. If I understood you correctly this can be used in your case. -
Hi sirop,
The above examples does everything ..i get error from QNetworkReply as "NO ERROR". But i do not want to send that text file and verify the accessibility..
Here we use
@ reply = manager.put(QNetworkRequest(url), data);@
i want to send only the ftp address as
reply = manager.put or get (QNetworkRequest(url));I am not sure what function to use whether it is get or put or something else..?
Let me give an example like i.e..the way we ping and find the accessibility of a network just with addressThanks
Bala Beemaneni -
hi sirop,
hi i did test that but of no use.Here is my code...
@ QUrl testFtp("ftp://"+server);
testFtp.setUserName(userId);
testFtp.setPassword(password);
testFtp.setPort(21);
request.setUrl(testFtp);// reply = manager.put(request,testData);
reply = manager.get(request);
connect(reply,SIGNAL(readyRead()),this,SLOT(readData()));
connect(reply,SIGNAL(uploadProgress(qint64,qint64)),this,SLOT(fileTransferProgress(qint64,qint64)));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),this, SLOT(slotSslErrors(QList<QSslError>)));@i get the error in Network Error says "202".
i.e: QNetworkReply::ContentOperationNotPermittedError -
Well then another way would be to try to download file from ftp server. If it exists then on finished signal you should get NoError
Eg:
@
manager->get(QNetworkRequest(QUrl("ftp://ftp.ed.ac.uk/pub/Unix/NT4_PlainPassword.reg")));
...void MainWindow::replyFinished(QNetworkReply *reply)
{
qDebug() << "Reply: " << reply->error(); //will show 0
}
@ -
hi dude...
thats not the way i guess.We just have an ip address,user,password.Just we need to ensure whether we are reachable to the server or not..We do not know what are the contents in ftp.So we cant download a file.
So cant we just login or connect to ftp server using QNAM?
What about the QNetworkSession? I could not understand this..can u suggest something elseThanks for ur interest p3c0
-
Deleted
-
Another way would be to try to connect the server using QTcpSocket as
@
QTcpSocket *socket = new QTcpSocket;
connect(socket,SIGNAL(connected()),this,SLOT(onConnected()));
socket->connectToHost("192.168.1.145",21);
if(!socket->waitForConnected(2000)) {
qDebug() << "Not connected";
socket->abort();
}
@If it succeeds then onConnected will be called immediately. But not sure if this is the recommended way.
-
Hii guys
Any updates on the previous ???
And i would like to add one more to this as..-
When the network we try to connect is not in reach it does not give error on time..It takes a lot of time and some times it never returns any error..How do i handle this?
@ connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),this, SLOT(slotError(QNetworkReply::NetworkError)));@
i am catching above signal which takes a lot of time...
Are there any best methods?Thanks
-