public class Pipe2Socket
{    public static final void main( String[] argv )
    {
        new Thread()
        {
            public void run()
            {
                new Pipe2Socket().test1();
            }
        }.start();
        
        new Thread()
        {
            public void run()
            {
                new Pipe2Socket().test2();
            }
        }.start();
    }    public void test1()
    {
        try {
            java.net.ServerSocket ss = new java.net.ServerSocket( 1111 );
            while ( true ) {
                java.net.Socket s = ss.accept();
                java.io.OutputStream os = s.getOutputStream();
                output( os );
                s.close();
            }
        } catch ( Exception ex ) {};
    }    public void test2()
    {
        try {
            java.net.ServerSocket ss = new java.net.ServerSocket( 2222 );
            while ( true ) {
                java.net.Socket s = ss.accept();
                java.io.OutputStream os = s.getOutputStream();
                java.io.ByteArrayOutputStream baos = new java.io.
                                                     ByteArrayOutputStream();
                output( baos );
                os.write( baos.toByteArray() );
                s.close();
            }
        } catch ( Exception ex ) {};
    }    public void output( java.io.OutputStream os )
    {
        try {
            for ( int i = 'a'; i < 'z'; i++ ) {
                os.write( i );
                Thread.sleep( 200 );
            }
        } catch ( Exception ex ) {};
    }}用
    telnet localhost 1111

    telnet localhost 1111
测试没用Pipe及用Pipe的差别

解决方案 »

  1.   

    少了一个,这个才是用到 Pipe 的    public void test3()
        {
            try {
                java.net.ServerSocket ss = new java.net.ServerSocket( 3333 );
                while ( true ) {
                    java.net.Socket s = ss.accept();
                    final java.io.PipedOutputStream pos = new java.io.PipedOutputStream();
                    java.io.PipedInputStream pis = new java.io.PipedInputStream(pos);
                    java.io.OutputStream os = s.getOutputStream();
                    new Thread()
                    {
                        public void run(){
                            output( pos );
                            try{
                                pos.close();
                            }catch(Exception ex){};
                        }
                    }.start();
                    int i;
                    while((i=pis.read())!=-1)
                    {
                        os.write(i);
                    }
                    s.close();
                }
            }
            catch (Exception ex) {
                
            }
        }用telnet localhost 3333测试
      

  2.   

    都没跟标准输出连上啊?另外使用上ouput(OutputStream)效率还不如使用重定向。也似乎不支持多Socket。