You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.9 KiB
Java

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