TCP线程池通信
程序员文章站
2022-03-04 08:47:38
...
TCP线程池通信
package TCP04;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
private static Scanner in;
public static void main(String[] args) {
System.out.println("----------客户端启动成功----------");
Socket socket;
try {
socket = new Socket("127.0.0.1",9999);
OutputStream os=socket.getOutputStream();
PrintStream ps=new PrintStream(os);
in = new Scanner(System.in);
while(true) {
System.out.println("请输入您要发送的信息:");
String s=in.nextLine();
ps.println(s);
ps.flush();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package TCP04;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("----------服务端启动成功----------");
ServerSocket ss=new ServerSocket(9999);
//一个服务端只需要对应一个线程池
HandlerSocketThreadPool handlerSocketThreadPool=new HandlerSocketThreadPool(3,100);
//客户端有很多个
while(true) {
Socket socket=ss.accept();
System.out.println("有人上线了");
//每次收到一个客户端的Socket请求,都要为这个客户端分配一个独立的线程专门负责对这个客户端的通信
handlerSocketThreadPool.execute(new ReaderClientRunnable(socket));
}
}
}
package TCP04;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class HandlerSocketThreadPool {
private ExecutorService executor;
public HandlerSocketThreadPool(int maxPoolSize, int queueSize) {
executor = new ThreadPoolExecutor(maxPoolSize, maxPoolSize, 120L, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(queueSize));
}
public void execute(Runnable task) {
this.executor.execute(task);
}
}
package TCP04;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.Socket;
public class ReaderClientRunnable implements Runnable{
private Socket socket;
public ReaderClientRunnable(Socket socket) {
this.socket=socket;
}
public void run() {
InputStream is;
try {
System.out.println(socket.getLocalAddress()+"上线了!");
is = socket.getInputStream();
Reader ris=new InputStreamReader(is);
BufferedReader bis=new BufferedReader(ris);
String line;
while((line=bis.readLine())!=null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println(socket.getRemoteSocketAddress()+"下线了~~~");
}
}
}
上一篇: 分析下面的程序
下一篇: ubuntu 无线网卡不稳定的解决方法