错误
06-20 12:03:36.630 23124-23124/com.example.admin.demoasync W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5839)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
java.lang.IllegalStateException: Client not connected
at it.sauronsoftware.ftp4j.FTPClient.disconnect(FTPClient.java:1123)
at com.example.admin.demoasync.Main4Activity.uploadFile(Main4Activity.java:66)
at com.example.admin.demoasync.Main4Activity$2.onClick(Main4Activity.java:46)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20300)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:5839)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
it.sauronsoftware.ftp4j.FTPException [code=550, message= No connections allowed from your IP]
代码
public void uploadFile(File fileName)
{
FTPClient client = new FTPClient();
try
{
client.connect(FTP_HOST,21);
client.login(FTP_USER, FTP_PASS);
client.setType(FTPClient.TYPE_BINARY);
client.changeDirectory("/PODTrack/Photo/");
client.upload(fileName, new MyTransferListener());
} catch (Exception e)
{
e.printStackTrace();
try
{
client.disconnect(true);
} catch (Exception e2)
{
e2.printStackTrace();
}
}
}
我们的IP没有被阻止。我可以通过另一个FTP客户端访问它。
答案 0 :(得分:0)
仔细查看堆栈跟踪。看看引发异常的方法是什么?是disconnect
!
正在发生的事情是您的try
块中的 something 抛出了 some 异常。您正在捕获该异常,并尝试断开连接。但是disconnect()
调用失败,并显示消息失败,因为client
未连接(!)
因此,较早的client.connect(...)
呼叫失败,或者该呼叫断开之后。 (登录可能会失败吗?)
解决方案将分为两部分:
更改
client.disconnect(true);
到
if (client.isConnected()) {
client.disconnect(true);
}
这将解决如果您调用disconnect()
并且当前未打开连接时发生的烦人的次要异常。
在堆栈跟踪中查找原始异常,以查看是否有任何线索。
如果您可以使用与运行Java代码相同的IP的命令行客户端访问FTP服务器,则:
检查是否在正确的端口上连接到正确的服务器。 (我认为这不是用户名和密码……但是stacktrace会告诉您!)
请检查这与使用不同FTP代理的Android Java代码和FTP客户端无关。 (如果您是在Java(tm)平台上运行的,则可能是这个原因,但对于Android(tm),我不知道。)