代码如下:
package bear.网络通讯;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 简易服务器
*
* @author huangxj 2018年3月17日
*
* @version v1.0
*/
public class 简易服务器 {
private static ExecutorService executorService = Executors.newCachedThreadPool();
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
System.out.println("服务器启动" + ss);
try {
while (!Thread.interrupted()) {
Socket socket = ss.accept();
System.out.println("接收到一个请求:" + socket);
executorService.execute(new HttpDefaultHandler(socket));
}
} finally {
ss.close();
}
}
/**
* Http请求默认处理器
*
* @author huangxj 2018年3月17日
*
* @version v1.0
*/
static class HttpDefaultHandler implements Runnable {
protected Socket socket;
protected InputStream in;
protected BufferedReader br;
protected OutputStream out;
protected PrintWriter pw;
public HttpDefaultHandler(Socket socket) throws IOException {
this.socket = socket;
init();
initRequestInfo();
}
/**
* 初始化
*
* @author huangxj 2018年3月17日
*
* @version v1.0
*/
private void init() throws IOException {
in = socket.getInputStream();
out = socket.getOutputStream();
pw = new PrintWriter(out);
br = new BufferedReader(new InputStreamReader(in));
}
/**
* 打印请求行
*
* @author huangxj 2018年3月17日
*
* @version v1.0
*/
protected void initRequestInfo() throws IOException {
String line = br.readLine();
System.out.println(line);
}
/**
* 处理请求并响应数据,子类可以重写该方法来做出特点类型的处理
*
* @author huangxj 2018年3月17日
*
* @version v1.0
*/
@SuppressWarnings("deprecation")
protected void process() {
pw.println("HTTP/1.1 200 OK");
pw.println("Content-Type:text/html;charset=utf-8");
pw.println();
pw.println("服务器已经接收到您的请求了!<br/>" + new Date().toLocaleString());
}
/**
* 关闭资源
*
* @author huangxj 2018年3月17日
*
* @version v1.0
*/
protected void close() throws IOException {
pw.close();
br.close();
socket.close();
}
/**
* 任务执行
*/
@Override
public void run() {
try {
process();
} finally {
try {
close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}