Java-программа не работает с ftp на Solaris. - PullRequest
1 голос
/ 28 января 2011

Я написал простое Java-приложение для работы с FTP. Он отлично работает на Windows и Linux, но зависает на Solaris. Вот исходный код:

import java.io.*;
import java.net.*;

public class ftp_try {

public static void main(String[] args) {
    final String hlpurl = "ftp://<user>:<pass>@host/../../some_path/some_file";
    try {
        URL url = new URL(hlpurl);
        final URLConnection con = url.openConnection();
        final int remoteSize = con.getContentLength();
        System.out.println("connection: " + con.toString());
        System.out.println("remote size:" + remoteSize);
        System.out.println("closing connection");
        con.getInputStream().close();
        System.out.println("connection closed");
        System.in.read();
       }
    catch ( MalformedURLException exp) {
            System.out.println("1");
       }
    catch (IOException exp) {
           System.out.println(2);
       }
    }
  }

Проблема в том, что на Solaris моя программа зависает после

System.out.println("closing connection");.

Не могли бы вы помочь мне выяснить, почему это происходит?

PS: JDK - это Java 6 SE u 23


Обновление: будет ли это полезной для тех, кто сталкивается с той же проблемой. Я нашел маленький обходной путь: прочитать все доступные байты из соединения, а затем вы можете закрыть его. Как это:

byte[] buffer= new byte [con.getInputStream().available()];    
con.getInputStream().read(buffer);

1 Ответ

0 голосов
/ 28 января 2011

Вы блокируете свою программу, читая стандартный ввод здесь:

System.out.println("connection closed");
System.in.read(); // <-- here

Если вы нажмете любую клавишу, программа будет завершена

...