2013-07-27 4 views
0

문제 : 버퍼링 된 reader.readline()에서 "무한 루프/블록"을 벗어날 수없는 것 같습니다. 그것은 한 번 전달하고 두 번째가 while 루프에서 돌아온 후에 거기에 매달립니다. 나는에서 nilbot에서 사용하는 방법을 사용하고Jsch - ssh를 통한 명령 전송

public void sendCommand(String command){ 
     { 
      String line; 
      try{ 
       while((line = consoleOutput.readLine())!= null) 
        { 
         System.out.println(line); 
         if(line.equals("rkscli:") || line.equals("password :") || line.equals("Please login: ")){ 
          pin.write((command + "\n\r").getBytes()); 
         } 
        } 
       } 

: Here 내가 정확히 뭐하는 거지, 내가 쉘을 통해 명령어를 전송하려고

여기 내 코드입니다.

문제점 :

서버가 더 명령을 수신 할 준비가 될 때까지 (프롬프트 "rkscli"대기 일부 명령은 시간이 더 걸릴 때문에) 대기하는 프로그램을 받고 내가 달성하기 위해 노력하고

. 이 작업을 수행하려면 어떻게해야합니까? 현재 pipedinput/output 메서드를 사용하고 있습니다.

기타 정보 :

는 서버가 프롬프트가 나타나기 전에 나 ""의 (줄 바꿈 빈 문자열)을 제공 할 것입니다. 그 중 몇 가지가 나에게 프롬프트를 줄 것입니다. 내가 코드를 변경 한 경우는이처럼 보였다 그래서 나는 또한 나타났습니다 :

public void sendCommand(String command){ 
    { 
     String line; 
     try{ 
      while((line = consoleOutput.readLine())!= null) 
       { 
        System.out.println(line); 
            pin.write("\r\n".getBytes());//Added line 
        if(line.equals("rkscli:") || line.equals("password :") || line.equals("Please login: ")){ 
         pin.write((command + "\n\r").getBytes()); 
        } 
       } 
      } 

그것은 아무것도 작성하지 않는 것 (합니다 (bufferedReader.readline에서 중지되지 않습니다)하지만 통과와 쓰기를 건너 뜁니다 쉘에 그리고 때로는 예측할 수 없을 것이다)

내가 할 수있는 것에 대한 아이디어는?

답변

0

좋아요, 나는 그 문자가 "/ 00"이라는 종결 문자 (null)를 결코 제공하지 않을 것이기 때문에 읽기 라인을하기보다는 모든 문자 (문자)를 읽음으로써 문제를 해결했다고 생각합니다. 읽기 라인이 그것을 찾는다는 것을 오해하지 않으며, 그것을 발견하고 계속되지 않을 때까지 기다릴 것입니다. 여기

은 수정 된 코드는 다음과 같습니다

line = new StringBuilder(); 
       boolean ready = false; 
       int c = 0; 
         Thread.sleep(1000);//needs to sleep, it isnt ready :(
         while((ready = consoleOutput.ready()) == true){ 
          ready = consoleOutput.ready(); 
          c = consoleOutput.read();//read char by char 
          line.append((char)c); 
          if((char)c == ':' && (c=consoleOutput.read()) == 0x20 && (consoleOutput.ready()!= true)){ 
           pin.write((command + "\n\r").getBytes());//writing after ready 
           pin.flush(); 
           System.out.println(line.toString() + command); 
           line = null; 
           break; 
          } 

내가 쉘에 아무것도 쓸 때이 차단 선을 읽고하지 계속 내 첫 번째 질문에서 쉘에 뭔가를 쓸 때 내가 가진 이상한 문제 그 책을 읽고 그것을 읽고 있었기 때문입니다.