|
|
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());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} |