下面是小弟的调试代码,请各位达人帮忙分析分析:public class SocketTest {    
    
    public SocketTestTest() {
        
    }
    
    public void startServer() {
        
        new Thread("服务器端线程") {
            public void run() {
                try {
                    ServerSocket serverConn = new ServerSocket(9000);
                    while (true) {
                        serverConn.setSoTimeout(0);
                        Socket clientConn = serverConn.accept();
                        ClientSession session = new ClientSession(clientConn,20);
                        
                        session.start();
                    }
                } catch (IOException e) {                    e.printStackTrace();
                }
            }        }.start();
    }
    
    
    private static class ClientSession {
        
        private int sleepTime=0;        
        private OutputStream outStream;
        private Socket conn=null;
        public ClientSession(Socket conn,int sleepTime) {
            this.conn=conn;
            this.sleepTime=sleepTime;
        }        
        
        public void send(byte [] bb) {
            
            try {
                outStream.write(bb);
                System.out.println("send msg to client");
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            
        }
        
        public void start() {            
            Thread.currentThread().setName("客户连接线程");
            
            try {
                outStream=conn.getOutputStream();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            new Thread(new SendThread(20),"SendThread_1").start();
            new Thread(new SendThread(5000),"SendThread_2").start();
     }
        
        private class SendThread implements Runnable {
            
            int waitTime=0;
            int sendCount=0;
            public SendThread(int waitTime) {
                this.waitTime=waitTime;
            }
            
            public void run() {
                while(true) {
                try {
                    byte bb [] =new byte[] {
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                            1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
                    
                    
                   //此处将被挂起,线程就不能在运行了     
                   send(bb);
                   
                    
                    Thread.sleep(waitTime);
                    
                } catch (InterruptedException e) {
                    
                    e.printStackTrace();
                }
                }
                
            }
            
            
        }
    }
    
    public void startClient() {
        
        Socket connection = null;
try {
    connection = new Socket("localhost",9000);
    
            final InputStream inputStream = connection.getInputStream();
            final OutputStream outputStream = connection.getOutputStream();
            
            new Thread() {
                public void run() {
                    setName("SendActive线程");
                    while(true) {
                        try {
                            outputStream.write(new byte[] {1,1,1,1,2,2,2});
                            
                            Thread.sleep(30*1000);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
            
            new Thread() {
                public void run() {
                    setName("客户端接收线程");
                    while(true) {
                        
                        try {
                            int i = inputStream.read();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        
                    }
                }
            };
            
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    }    public static void main(String[] args) {
        SocketTest socketTest = new SocketTest();
        socketTest.startServer();
        
        socketTest.startClient();
        
        
    }
}