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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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