📄 echoserver.java
字号:
import java.io.*;
import java.net.*;
public class EchoServer{
private int port=8000;
private ServerSocket serverSocket;
private ThreadPool threadPool; //线程池
private final int POOL_SIZE=4; //单个CPU时线程池中工作线程的数目
public EchoServer() throws IOException
{
serverSocket=new ServerSocket(port);
threadPool=new ThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
System.out.println("服务器启动");
}
public void service()
{
while(true)
{
Socket socket=null;
try{
socket=serverSocket.accept();
System.out.println("accept");
threadPool.execute(new Handler(socket)); //把与客户客户通信的任务交给线程池
}catch(IOException e)
{
e.printStackTrace();
}
}
}
public static void main(String args[])throws IOException
{
new EchoServer().service();
}
}
class Handler implements Runnable //负责与单个客户通信
{
private Socket socket;
public Handler(Socket socket)
{
this.socket=socket;
}
private PrintWriter getWriter(Socket socket) throws IOException
{
OutputStream socketOut=socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket)throws IOException
{
InputStream socketIn=socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public String echo(String msg)
{
return "echo:"+msg;
}
public void run()
{
try{
System.out.println("task running");
System.out.println("New connection accepted "+
socket.getInetAddress()+":"+socket.getPort());
BufferedReader br=getReader(socket);
PrintWriter pw=getWriter(socket);
String msg=null;
while((msg=br.readLine())!=null)
{
System.out.println(msg);
pw.println(echo(msg));
if(msg.equals("bye"))
break;
}
}catch(IOException e)
{
e.printStackTrace();
}
finally{
try{
if(socket!=null) socket.close();//断开连接
}catch(IOException e){e.printStackTrace();}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -