代码主要分为4个部分:
1 服务器端 ChartServer
2 客户端 ChartClient
3 当客户端给服务器端发送请求时,服务器端要给每一个提出请求的客户端分配一个线程ChartHandle
3 客户端需要有两个线程,主线程负责读取键盘输入,第二个线程负责读取其他客户端发过来的信息UserInputHandle,就像微信聊天时,一个线程是接受你的输入,同时别人说的话你也可以收到,互不影响
ChartServer实现:
package ChartApp;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ChartServer {
private final int DEFAULT_PORT = 8888;
private final String QUIT = "quit";
private Map<Integer, Writer> connectedClient = null;
private ServerSocket server = null;
private ExecutorService executorService = null;
public ChartServer()
{
executorService = Executors.newFixedThreadPool(10);
connectedClient = new HashMap<>();
}
public synchronized void addClient(Socket socket) throws IOException {
if(socket != null){
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
connectedClient.put(socket.getPort(),writer);
System.out.println("客户端["+socket.getPort()+"]已到达服务器");
}
}
public synchronized void removeClient(Socket socket) throws IOException {
if(socket != null){
int port = socket.getPort();
if(connectedClient.containsKey(port)){
connectedClient.get(port).