2011-09-21 66 views
2

我想通過telnet與Windows服務器中的應用程序進行交互,因此我使用TelnetClient()方法。我可以使用System.in.read()交互(發送命令和檢索結果),但是我想要的是這個程序自動運行而不使用任何鍵盤輸入。所以,我的問題是,爲什麼System.in.read()工作,但ByteArrayInputStream不?爲什麼ByteArrayInputStream不會返回預期的結果?

這是我到目前爲止的代碼:

public class telnetExample2 implements Runnable, TelnetNotificationHandler{ 
static TelnetClient tc = null; 
public static void main (String args[]) throws IOException, InterruptedException{ 
    tc = new TelnetClient(); 
    while (true){ 
    try{ 
    tc.connect("192.168.1.13", 8999); 
    } 
    catch (SocketException ex){ 
     Logger.getLogger(telnetExample2.class.getName()).log(Level.SEVERE, null,ex); 
    } 
    Thread reader = mew Thread(new telnetExample2()); 
    tc.registerNotifHandler(new telnetExample2()); 
    String command = "getversion"; //this is the command i would like to write 
    OutputStream os = tc.getOutputStream(); 
    InputStream is = new ByteArrayInputStream(command.getBytes("UTF-8")); //i'm using UTF-8 charset encoding here 
    byte[] buff = new byte[1024]; 
    int ret_read = 0; 
    do{ 
    ret_read = is.read(buff); 
    os.write(buff, 0, 10) 
    os.flush(); 
    while(ret_read>=0); 
    } 
} 

public void run(){ 
InputStream instr = tc.getInputStream(); 
try{ 
    byte[] buff = new byte[1024]; 
    int ret_read = 0; 
    do{ 
    ret_read = instr.read(buff); 
    if(ret_read >0){ 
    System.out.print(new String(nuff, 0, ret_read)); 
    } 
    while(ret_read>=0);} 
    catch(Exception e){ 
    System.err.println("Exception while reading socket:" + e.getMessage()); 
    } 
} 

public void receiveNegotiation(int i, int ii){ 
throw new UnsupportedOperationException("Not supported"); 
} 
} 
+2

在將命令複製到輸出流的代碼中,存在邏輯錯誤。 os.write(buff,0,10)必須是os.write(buff,0,ret_read) –

+0

你還沒有說你在觀察什麼。請閱讀http://tinyurl.com/so-hints –

回答

6
InputStream is = new ByteArrayInputStream(command.getBytes("UTF-8")); //i'm using UTF-8 charset encoding here 
byte[] buff = new byte[1024]; 
int ret_read = 0; 
do{ 
ret_read = is.read(buff); 
os.write(buff, 0, 10) 
os.flush(); 
while(ret_read>=0); 
} 

可以減少這些9號線不工作,os.write(command.getBytes("UTF-8"));哪些呢。

爲什麼你認爲最多可以讀取1024個字節到緩衝區,然後只寫出其中的前10個是有用的,這是一個謎。

+0

+1:那是我想知道的。 ;) –