我正在尝试为多个用户帐户创建一个ftp客户端。添加用户帐户时,我需要检查主机和用户详细信息是否有效。为此,我创建了一个方法。
bool FtpConnect::checkConnectivity(QString remoteIP, QString username, QString password)
{
QUrl server;
server.setScheme("ftp");
server.setHost(remoteIP);
if (!server.isValid()) {
QMessageBox::warning(0, "Error", "Invalid Host");
return false;
}
server.setPort(21);
server.setUserName(username);
server.setPassword(password);
QFtp *ftp = new QFtp(this);
ftp->connectToHost(server.host(), server.port());
int status = ftp->login(server.userName(), server.password());
QMessageBox::information(0, "Updated", QString::number(status));
return (ftp->list() == 4) ? true : false;
}
如果连接正常,我需要代码返回true,而当连接无法完成时,我需要返回false。不,变量status
返回4
信号QFtp::Connecting
。请有人帮助我。
答案 0 :(得分:2)
QFtp方法不会阻止执行。该命令已被调度,并且它的执行是异步执行的
在您致电status()
或connectToHost()
后,您无法立即查看login()
,因为此时状态仍为Unconnected
。您应该等待发出信号。
ftp->list()
和其他方法返回命令id,因此检查返回值没有意义。您可以做的是记住id并等待commandFinished()
信号与此ID,但还有另一种选择
使用QFtp::stateChanged并检查QFtp::LoggedIn
。