пассивный ftp в Java - почему поток не готов - PullRequest
0 голосов
/ 08 августа 2011

еще одна проблема Java ... получил клиент, который должен подключиться к серверу через пассивный режим. похоже, работает нормально, я получаю IP-адрес, порт и пассивный сокет, который говорит, что он готов.

, но passivesocket.getInputStream вообще не готов - поэтому я не могу читать с него и не получаю ответ на LIST. не могу понять почему, какие-либо предложения?

public synchronized void getPasvCon() throws IOException, InterruptedException {

        // Commands abholen


        // IP Adresse holen
Thread.sleep(200);
        String pasv = commands.lastElement(); 
        String ipAndPort = pasv.substring(pasv.indexOf("(") + 1,
                pasv.indexOf(")"));

        StringTokenizer getIp = new StringTokenizer(ipAndPort);

        // holt die IP
        String ipNew = "";   // IP für den neuen Socket
        for (int i = 0; i < 4; i++) {
            if (i < 3) {
                ipNew += (getIp.nextToken(",") + ".");
            } else {
                ipNew += (getIp.nextToken(","));

            }
        }


        Integer portTemp1 = new Integer( getIp.nextToken(","));
        Integer portTemp2 = new Integer (getIp.nextToken(","));
        portNew = (portTemp1 << 8 )+ portTemp2;

System.out.println(">>>>> " + ipNew + ":" + portNew);       


        try {

            pasvSocket = new Socket(ipNew, portNew);
            System.out.println("Socket verbunden: "+  pasvSocket.isConnected());

        } catch (UnknownHostException e) {
            System.out.println("Host unbekannt");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            fromPasvServer = new BufferedReader(new InputStreamReader(
                    pasvSocket.getInputStream()));
            Thread.sleep(2000);
            System.out.println("Streams bereit: " + fromPasvServer.ready() + " | " );
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            writePasvCommands = new PrintWriter(pasvSocket.getOutputStream(),
                    true);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   


Thread.sleep(3000);
        Thread pasvKonsole = new Thread(new PasvKonsole(this));

        pasvKonsole.start();

    }

    public void LIST() throws IOException  {
    writeCommands.print("LIST\n");
    writeCommands.flush();

    }


    public void run() {
        try {
            connect();

    //      getStatus();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            USER();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        PASS();


        try {
            Thread.sleep(2000);
            PASV();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


import java.io.IOException;


public class PasvKonsole extends Thread {
    Client client;
    public PasvKonsole(Client client) {
        this.client = client;
    }

    public void run() {
        System.out.println("========= PasvKonsole started");

    while(true) {

        try {

            String lineP = client.fromPasvServer.readLine();
                System.out.println("***" + lineP);
                System.out.println("Ich bin da und tue auch was");  
        } catch (IOException e) {}

    }       
    }
}

1 Ответ

0 голосов
/ 09 августа 2011

Добавлен Thread.Sleep и все работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...