package leaningSocket; import java.io.*; import java.net.*; public class Test { private int port=8000; private ServerSocket serverSocket; public Test () throws IOException { serverSocket = new ServerSocket(port); System.out.println("服务器启动"); } public void service() { while (true) { Socket socket=null; try { socket = serverSocket.accept(); //接收客户连接 Thread workThread=new Thread(new Handler(socket)); //创建一个工作线程 workThread.start(); //启动工作线程 }catch (IOException e) { e.printStackTrace(); } } } public static void main(String args[])throws IOException { new Test ().service(); } } /**继承Runnable接口*/ class Handler implements Runnable{ private Socket socket; public Handler(Socket socket){ this.socket=socket; } private PrintWriter getWriter(Socket socket)throws IOException{ OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut,true); } private BufferedReader getReader(Socket socket)throws IOException{ InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } /**把客户端发来的MSG 加上 “echo”后重新返回到客户端*/ public String echo(String msg) { return "echo:" + msg; } public void run(){ try { /** * 每当有一个用户链接到服务器时候就打印出下面这句话 * 当然也是每当有个用户链接到服务器时就会创建一个线程 * 用户多了就叫做多线程了^ ^ * */ System.out.println("New connection accepted " + socket.getInetAddress() + ":" +socket.getPort()); /**获得输入流里的信息*/ BufferedReader br =getReader(socket); /**关联到输出流*/ PrintWriter pw = getWriter(socket); String msg = null; while ((msg = br.readLine()) != null) { /**把客户端发送过来的信息打印出来*/ System.out.println(msg); /**网输出流扔入信息,该信息将会显示在客户端*/ pw.println(echo(msg)); if (msg.equals("bye")) break; } }catch (IOException e) { e.printStackTrace(); }finally { try{ if(socket!=null)socket.close(); }catch (IOException e) {e.printStackTrace();} } } } /**************************************************** * 作者:孙卫琴 * * 来源:<<Java网络编程精解>> * * 技术支持网址:www.javathinker.org * ***************************************************/ 看完了“单线程”然后就该看多线程了,发现多线程在理解上还是不难的,对于每个链接客户端的用户,我们都为他 设置一个线程,然后在线程中进行事件处理。。。。嗯,暂时先这样浑沦吞枣吧,继续。。