b站视频
老师讲的还是比较清晰的,如有不清楚的,可以翻阅视频
服务端代码
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try{
System.out.println("=====服务端启动=====");
ServerSocket ss = new ServerSocket(9999);
HandlerSocketServerPool pool = new HandlerSocketServerPool(3, 10);
while (true){
Socket socket = ss.accept();
pool.execute(new ServerRunnableTarget(socket));
}
}catch (Exception ex){
System.out.println("有人下线了");
ex.printStackTrace();
}
}
}
线程池代码
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class HandlerSocketServerPool {
//创建一个线程池的成员变量用于存储一个线程池对象
private ExecutorService executorService;
//创建这个类的对象的时候需要初始化线程池对象
public HandlerSocketServerPool(int maxThreadNum, int queueSize){
executorService = new ThreadPoolExecutor(2, maxThreadNum,
120, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(queueSize));
}
//提交任务给线程池处理
public void execute(Runnable target){
executorService.execute(target);
}
}
线程- 执行任务代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ServerRunnableTarget implements Runnable {
private Socket socket;
public ServerRunnableTarget(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String msg;
while( (msg = reader.readLine()) != null ){
System.out.println("服务端接收到:" + msg);
}
} catch (IOException e) {
System.out.println("系统提醒:有人已下线!");
// e.printStackTrace();
}
}
}
客户端代码
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
//1.请求与服务器端Socket对象链接
//资源类放到try里的写法,是Java引入的新特性
try{
Socket socket = new Socket("127.0.0.1", 9999);
//得到一个打印流
PrintStream ps = new PrintStream(socket.getOutputStream());
//使用循环不断的发送消息给服务端接收
while (true){
Scanner scanner = new Scanner(System.in);
System.out.print("请说");
String msg = scanner.nextLine();
ps.println(msg);
ps.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}