2016-04-10 14 views
0

TCPソケットを使用してデータを送信したいです。 キーボード入力はOKです。 バイナリファイルも正しくリダイレ​​クトされます。 しかし 私は/ dev/urandomをstdinにリダイレクトすると(java prog </dev/urandom)、何も起こりません。エラーもデータも送信されません。Javaソケット/ 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'の周りにループがある2番目の場所があります。あなたはそれを削除しましたか? – Joni