Java Socket / TCP和/ dev / urandom

时间:2016-04-10 18:30:44

标签: java sockets tcp

我想使用TCP Socket发送一些数据; 键盘输入没问题。 重定向二进制文件也很好。 但 当我将/ dev / urandom重定向到stdin(java prog< / 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 :(得分:0)

不要使用available方法,它只会告诉您是否可以在不阻塞的情况下读取内容,这是非常无用的。改为使用无限循环。

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

使用EOFException发出文件结束信号。确保在抛出异常时关闭文件。