固定電話で問題なく動作する FTPClient に深刻な問題がありますが、Android ワイヤレス デバイスで同じ実装を使用しようとすると、接続が固まってしまいます。
コードを Android アプリケーションにデプロイしましたが、結果が良くありません。ファイルをダウンロードできる場合もあれば、40% しかダウンロードできない場合もあり、java.net.SocketTimoutException で接続がタイムアウトします。ここに例外があります:
05-27 19:37:49.390: DEBUG/SntpClient(1290): request time failed: java.net.SocketTimeoutException: Connection timed out
05-27 19:32:55.417: WARN/System.err(5129): java.net.SocketTimeoutException
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:564)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:88)
05-27 19:32:55.467: WARN/System.err(5129): at java.io.InputStreamReader.read(InputStreamReader.java:275)
05-27 19:32:55.467: WARN/System.err(5129): at java.io.BufferedReader.fillBuf(BufferedReader.java:155)
05-27 19:32:55.467: WARN/System.err(5129): at java.io.BufferedReader.read(BufferedReader.java:261)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:479)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:552)
05-27 19:32:55.467: WARN/System.err(5129): at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:601)
05-27 19:32:55.475: WARN/System.err(5129): at org.apache.commons.net.ftp.FTP.abor(FTP.java:754)
05-27 19:32:55.475: WARN/System.err(5129): at org.apache.commons.net.ftp.FTPClient.abort(FTPClient.java:2432)
05-27 19:32:55.475: WARN/System.err(5129): at src.app.asyncTasks.ftp.DownloadFTPFilesTask$2.onClick(DownloadFTPFilesTask.java:186)
05-27 19:32:55.475: WARN/System.err(5129): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
05-27 19:32:55.475: WARN/System.err(5129): at android.os.Handler.dispatchMessage(Handler.java:99)
05-27 19:32:55.475: WARN/System.err(5129): at android.os.Looper.loop(Looper.java:143)
05-27 19:32:55.475: WARN/System.err(5129): at android.app.ActivityThread.main(ActivityThread.java:4717)
05-27 19:32:55.483: WARN/System.err(5129): at java.lang.reflect.Method.invokeNative(Native Method)
05-27 19:32:55.483: WARN/System.err(5129): at java.lang.reflect.Method.invoke(Method.java:521)
05-27 19:32:55.491: WARN/System.err(5129): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-27 19:32:55.491: WARN/System.err(5129): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-27 19:32:55.491: WARN/System.err(5129): at dalvik.system.NativeStart.main(Native Method)
05-27 19:32:55.522: WARN/InputManagerService(1290): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@45a93758
私はこれの理由を見つけることができません。サーバーが応答を停止しているようです。設定できるオプションはありますか? 私はすでにSOTimeoutを試しましたが、オーバーフローか何かのようです。ファイルのダウンロードはどこかで停止しますが、完了しません。
編集:
apache commons を使用して Acitve FTP サーバーに接続しています。ServerSocket がクラッシュするか、単にタイムアウトになる可能性があります... ? 独自のサーバー ファクトリを実装しようと考えていましたが、まだ方法がわかりません。Motorola Milestone で Android 2.1 を使用しています。