一个简单的支持多客户端的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)
{
}
}
}
}
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)
{
}
}
}
}
关健在这里,查看进程,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;
}