一个简单的支持多客户端的TCP程序如何提高效率,还有怎么判断客户端关闭连接?
public class TCPServerTasker extends TimerTask
{
    private ServerSocket serverSocket;    private int serverPort;    public TCPServerTasker()
    {
        serverPort = 7002
    }    /*
     * (non-Javadoc)
     * 
     * @see java.util.TimerTask#run()
     */
    public void run()
    {
        try
        {
            serverSocket = new ServerSocket(serverPort);
        }
        catch (IOException e)
        {
            log.info("Accept TCP message thread stop,beceuse found SocketException:" + e);
            return;
        }        try
        {
            while (true)
            {
                Socket socket = null;
                try
                {
                    socket = serverSocket.accept();
                    new DoWithTCPSocketThread(socket);
                }
                catch (IOException e)
                {
                    log.info("Socket connect fail,close connection");
                    if( socket != null )
                    {
                        try
                        {
                            socket.close();
                        }
                        catch (IOException e1)
                        {
                            log.info("Socket connect close fail,because found IOException:" + e1);
                        }
                    }
                }
            }
        }
        finally
        {
            try
            {
                serverSocket.close();
                log.info("TCP Server close...");
            }
            catch (IOException e)
            {
                log.info("Accept TCP message thread stop,beceuse found SocketException:" + e);
            }
        }
    }    public static void main(String args[])
    {
        Timer timer = new Timer();
        timer.schedule(new TCPServerTasker(), 1000);
    }
}
class DoWithTCPSocketThread extends Thread
{    private Socket socket;    private BufferedReader in;    private PrintWriter out;    public DoWithTCPSocketThread(Socket s) throws IOException
    {
        socket = s;
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);        start(); 
    }    @Override
    public void run()
    {
        try
        {            while (true)
            {
                InputStream inputStream = socket.getInputStream();
                byte bs[] = new byte[inputStream.available()];
                if( inputStream.read(bs) > 0 )
                {
                    System.out.println(NetTool.format(bs, " "));
                }
                if(socket.isInputShutdown())
                {
                    break;
                }
            }
            System.out.println("exit socket.");
        }
        catch (IOException e)
        {
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch (IOException e)
            {
            }
        }
    }
}

解决方案 »

  1.   

    InputStream inputStream = socket.getInputStream();
                    关健在这里,查看进程,java占有80-90%的cpu,请问大虾们,如何改进,如何判断客户端关闭联接
                    byte bs[] = new byte[inputStream.available()];
                    if( inputStream.read(bs) > 0 )
                    {
                        System.out.println(NetTool.format(bs, " "));
                    }
                    if(socket.isInputShutdown())
                    {
                        break;
                    }
      

  2.   

    客户端关闭联接无法判断吗?那就让客户端关闭联接前加个代码发句话给server端好了.