package com.engine.web.tjbk; import com.alibaba.druid.util.StringUtils; import weaver.general.BaseBean; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class TjbkWebSocket implements ServletContextListener { public static final int port = 8090;//监听的端口号 public static void main(String[] args) { System.out.println("Server...\n"); TjbkWebSocket server = new TjbkWebSocket(); server.init(); } public void init() { try { System.out.println("new ServerSocket"); //创建一个ServerSocket,这里可以指定连接请求的队列长度 //new ServerSocket(port,3);意味着当队列中有3个连接请求是,如果Client再请求连接,就会被Server拒绝 ServerSocket serverSocket = new ServerSocket(port); while (true) { //从请求队列中取出一个连接 Socket client = serverSocket.accept(); // 处理这次连接 new HandlerThread(client); } } catch (Exception e) { System.out.println("服务器异常: " + e.getMessage()); } } @Override public void contextInitialized(ServletContextEvent servletContextEvent) { new Thread(new Runnable(){ @Override public void run() { TjbkWebSocket server = new TjbkWebSocket(); server.init(); } }).start(); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } private class HandlerThread implements Runnable { private Socket socket; public HandlerThread(Socket client) { socket = client; new Thread(this).start(); } @Override public void run() { try { // 读取客户端数据 BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); StringBuilder sb = new StringBuilder(); String line = "";//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException while ((line = input.readLine()) != null || StringUtils.isEmpty(line)) { // 处理每一行数据 sb = sb.append(line); } // byte[] buffer = new byte[1024]; // int bytesRead; // while ((bytesRead = input.read(buffer)) != -1) { // // 将读取的数据追加到 StringBuilder // sb.append(new String(buffer, 0, bytesRead)); // } // 处理客户端数据 new BaseBean().writeLog("客户端发过来的内容:" + sb); // 业务处理 // 向客户端回复信息 PrintStream out = new PrintStream(socket.getOutputStream()); // 发送键盘输入的一行 // String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); String s = new TJBKWorkFlow().getToDoCount(sb.toString()); out.println(s); out.close(); input.close(); } catch (Exception e) { System.out.println("服务器 run 异常: " + e.getMessage()); } finally { if (socket != null) { try { socket.close(); } catch (Exception e) { socket = null; System.out.println("服务端 finally 异常:" + e.getMessage()); } } } } } }