2016-04-10 51 views
0

我想用TCP Socket發送一些數據; 鍵盤輸入正常。 也很好地重定向二進制文件。 但是 當我將/ dev/urandom重定向到stdin(java prog </dev/urandom)時沒有任何反應,沒有錯誤,沒有數據發送。Java Socket/TCP和/ dev/urandom

public class P1{ 
    static DataInputStream dis = new DataInputStream(System.in); 
    int  port = 12345; 
    String host = "127.0.0.1"; 
    Socket p1Socket; 
    DataOutputStream out; 
    byte data; 
    void run() { 
     try{ 
      p1Socket = new Socket(host, port); 
      out = new DataOutputStream(p1Socket.getOutputStream()); 

      while (dis.available() >0){ 
       data = dis.readByte(); 
       out.write (data  ); 

      } 
      out.flush(); 
      out.close(); 
      p1Socket.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

    } 

    public static void main(String args[]) throws IOException { 
     P1 p1 = new P1(); 
     while (dis.available() <=0); 
     p1.run(); 

    } 
} 
+1

令人驚訝的是,您從未準備好發送無限量的數據? –

回答

0

不要使用available方法,它只是告訴你,如果事情可以不受阻塞,這是非常無用的閱讀。改用一個無限循環。

 while (true) { 
      data = dis.readByte(); 
      out.write(data); 
     } 

文件結束標記爲EOFException。確保在拋出異常時關閉文件。

+0

無限循環無法解決問題 – Iluvatar

+0

在程序中還有一個地方圍繞'available'有一個循環。你刪除它了嗎? – Joni