一个简单的Demo,使用serverSocket实现对服务器指定端口的监听,将所有连接的客户端放在线程中管理
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class LoginListener {
private static final int PORT_NUM = 8081;//监听端口号
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(50);//线程池
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(PORT_NUM);
System.out.println("服务启动成功");
//循环监听端口连接
while(true){
try {
Socket socket = serverSocket.accept();
Callable<Void> task = new MyThread(socket);//将所有连接放入线程管理
pool.submit(task);
} catch (IOException e) {
//ignore
}
}
} catch (IOException e) {
// TODO: handle exception
System.out.println("服务启动失败");
e.printStackTrace();
} finally {
if(serverSocket != null){
try {
serverSocket.close();
} catch (IOException e) {
//ignore
}
}
}
System.out.println("服务关闭");
}
}
class MyThread implements Callable<Void>{
//根据需求修改返回给客户端的返回代码
private final int RESULT_OK = 1;
private final int RESULT_CONNECTION_CLOSED = 2;
private Socket socket;
MyThread(Socket socket) {
this.socket = socket;
}
@Override
public Void call() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
int ok = RESULT_CONNECTION_CLOSED;
// TODO: 完成逻辑操作
//给客户端返回结果
if(ok == RESULT_OK) {
writer.write("RESULT_OK" + "\r\n");
writer.flush();
} else if (ok == RESULT_INVALID_USER){
writer.write("RESULT_INVALID_USER" + "\r\n");
writer.flush();
} else if(ok == RESULT_INVALID_PASSWORD){
writer.write("RESULT_INVALID_PASSWORD" + "\r\n");
writer.flush();
} else if(ok == RESULT_CONNECTION_CLOSED){
writer.write("RESULT_CONNECTION_CLOSED" + "\r\n");
writer.flush();
}
reader.close();
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(socket != null){
try {
socket.close();
} catch (IOException e) {
//ignore
}
}
}
return null;
}
}