2013-11-22 26 views
0

使用下面的代碼,我沒有在控制檯上打印「daSHI」。 而不是我得到「?????」打印。套接字 - 錯誤的OutputStream輸出(質樸的問號)

爲了測試,而不是使用套接字的輸入/輸出流,我創建了一個FileInputStream和FileOutputStream從同一個文件中讀寫,並且「daSHI」打印得很好。

但是,當我使用sock.getOutputStream和sock.getInputStream時,由於某種原因它不起作用。我得到的只是問號。有任何想法嗎?編碼問題?

public void sendMessage(Socket sock) throws KVException { 

    OutputStream outStream; 
    InputStream inStream; 

    try{ 

     byte[] b = {'d', 'a', 'S', 'H', 'I'}; 
     outStream = sock.getOutputStream(); 

     outStream.write(b); 
     sock.shutdownOutput(); 



     inStream = sock.getInputStream(); 

     for (int i = 0; i < b.length; i++) { 
      System.out.print("" + (char) inStream.read()); 
     } 

    } 
    catch(IOException e){ 
     KVMessage errorMessage = new KVMessage("resp", "Network Error: Could not send data"); 
     throw new KVException(errorMessage); 
    } 
} 
+0

這是一個環回套接字連接?您沒有展示如何將套接字連接到另一端。迴應數據的另一端是什麼? –

+0

隨機猜測:輸入流位於EOF處,並且僅爲5倍-1。省略(char)來驗證。爲什麼?取決於您的服務器...您是否嘗試添加outStream.flush()並僅在您從輸入讀取數據後關閉套接字? –

+0

你的'''InputStream'與'OutputStream'不一樣。那麼,爲什麼你期望數據回顯? –

回答

0

除非你連接到一個回聲服務器或同一應用程序的另一個副本,插座不工作的方式:你不能指望讀你寫的什麼,因爲你正在讀什麼套接字的最遠端正在發送。

最有可能的是,這裏的原因是輸入流已經命中EOF並且read()返回-1。當投射到char時,-1變成zigamorph,並且打印該無效字符產生?

+0

有趣,謝謝你的洞察力。 – Jonathan