java当中socket多线程是怎样写可以将所有客户发来的消息数记录下来并显示给客户,客户当前跟服务器说的是第几句话,比如第一个客户:0:0:aa
服务器回复aa
第一个客户:1:1:bb
服务器回复bb
第二个客户:2:0:aa
服务器回复aa
第二个客户:3:1:bb
第一个数是总行数,第二个是当前客户行数第三个就是内容了现在这个程序已经完成了后两个,第一个总行数咋实现 谁给发个代码啥的谢谢最好能在这里加
package DemoServer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SocketHandler;
import org.w3c.dom.css.Counter;
public class Server {
public static void main(String[] args) throws IOException
{
int port = 8821;
ServerSocket serverSocket = new ServerSocket(port);
ExecutorService exe = Executors.newFixedThreadPool( //只有一个ExecutorService,执行
Runtime.getRuntime().availableProcessors()*10);
while(true)
{
Socket socket = serverSocket.accept();
exe.execute(getTask(socket)); //开启多个线程
}
}
public static Runnable getTask(final Socket s)
{
// Map lines = new HashMap();
return new Runnable(){
private BufferedReader br = null;
private PrintWriter pw = null;
private Socket socket = null;
private int number = 0;
// private int count;
public void run() {
try {
this.socket = s; //socket可以传递
System.out.println("接收到客户端的数据");
br = getReader(socket);
pw = getWriter(socket);
//从客户端读
String msg = null;
while (( msg = br.readLine()) != null) {
System.out.println(msg);
number++;
pw.println(count +":" + number +":"+ msg);
if(msg.equals("bye")) //注意,没有这句不能退出while
break;
}
//向客户端写
pw.println("数据正确");
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if(socket!=null)
socket.close();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
//从客户端读数据
private BufferedReader getReader(Socket socket) throws IOException {
InputStream input = socket.getInputStream();
return new BufferedReader(new InputStreamReader(input));
}
//向客户端写数据
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream output = socket.getOutputStream();
return new PrintWriter(new OutputStreamWriter(output),true);//注意true是提醒刷新
}
};
}
}