【问题标题】:No connections allowed from your IP不允许来自您的 IP 的连接
【发布时间】:2018-06-20 12:09:29
【问题描述】:

错误

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 客户端访问它。

【问题讨论】:

  • 可能设备/模拟器使用不同的 IP ;)
  • “我可以通过其他 FTP 客户端访问它” - 客户端是否与您的 Java 代码在同一台机器上运行 + 您是否在 中使用相同的用户名“其他 FTP 客户端”?

标签: java android ftp


【解决方案1】:

仔细查看堆栈跟踪。看看是什么方法抛出了异常?是disconnect

正在发生的事情是您的try 块中的 something 正在引发 some 异常。您正在捕获该异常,并尝试断开连接。但是disconnect() 调用失败,并且消息说它失败是因为client 没有连接(!)

因此,之前的 client.connect(...) 呼叫失败,或者该呼叫断开后的某些事情。 (可能是登录失败吗?)

解决方案将分为两部分:

  1. 改变

      client.disconnect(true);
    

      if (client.isConnected()) {
          client.disconnect(true);
      }
    

    这将解决如果您调用 disconnect() 并且连接当前未打开时发生的烦人的次要异常。

  2. 查看原始异常的堆栈跟踪,看看是否有任何线索。

如果您可以在运行 Java 代码的同一 IP 上使用命令行客户端访问 FTP 服务器,那么:

  • 检查您是否在正确的端口上连接到正确的服务器。 (我不认为这将是用户名和密码......但堆栈跟踪会告诉你!)

  • 检查这是否与您的 Android Java 代码和使用不同 FTP 代理的 FTP 客户端有关。 (如果您在 Java (tm) 平台上运行,这可能是一个原因,但我不知道 Android (tm) 的情况。)

【讨论】:

  • 虽然您是对的,但我相信 OP 正确地说明了根本原因:FTPException [code=550, message= No connections allowed from your IP]
  • @MartinPrikryl - 您仍然需要查看主堆栈跟踪以查看消息/异常来自哪里。修复disconnect 问题就可以了。
猜你喜欢
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2019-06-24
  • 2017-09-23
  • 2019-10-08
相关资源
最近更新 更多