2016-04-10 2 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