自己动手写简单的web应用服务器(2)—实现多个客户端端连接同一个服务器
服务端源码:
1 package serverAndClients; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.io.OutputStreamWriter; 9 import java.io.PrintWriter; 10 import java.net.ServerSocket; 11 import java.net.Socket; 12 13 public class Server { 14 private ServerSocket ss; 15 private int port = 8081; 16 17 /** 利用构造方法,初始化ServerSocket */ 18 public Server() { 19 try { 20 ss = new ServerSocket(port); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 } 24 } 25 26 /** 服务器启动,等待客户端进入,产生socket对象,将该对象交给线程去执行 */ 27 public void start() { 28 while(true){ 29 try { 30 Socket s = ss.accept(); 31 Thread clientThread = new Thread(new Handler(s)); 32 clientThread.start(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 38 } 39 40 private class Handler implements Runnable { 41 private Socket s; 42 43 /** 利用构造方法,接收传入的socket */ 44 public Handler(Socket s) { 45 this.s = s; 46 } 47 48 @Override 49 public void run() { 50 51 try { 52 InputStream is = s.getInputStream(); 53 OutputStream os = s.getOutputStream(); 54 BufferedReader reader = new BufferedReader( 55 new InputStreamReader(is, "utf-8")); 56 PrintWriter writer = new PrintWriter(new OutputStreamWriter(os, 57 "utf-8")); 58 System.out.println("有客户端进入:"); 59 String str = reader.readLine(); 60 System.out.println("接受客户端消息:" + str); 61 writer.println("你好,客户端!"); 62 writer.flush(); 63 s.close(); 64 } catch (IOException e) { 65 e.printStackTrace(); 66 } 67 } 68 69 } 70 71 public static void main(String[] args) { 72 Server server = new Server(); 73 server.start(); 74 } 75 }
客户端源码:
1 package serverAndClients; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.io.OutputStreamWriter; 9 import java.io.PrintWriter; 10 import java.net.Socket; 11 import java.net.UnknownHostException; 12 13 public class Client { 14 private Socket s; 15 16 public void send(){ 17 try { 18 s = new Socket("192.168.1.103",8081); 19 InputStream is = s.getInputStream(); 20 OutputStream os = s.getOutputStream(); 21 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8")); 22 PrintWriter writer = new PrintWriter(new OutputStreamWriter(os,"utf-8")); 23 writer.println("你好服务器!"); 24 writer.flush(); 25 String str = reader.readLine(); 26 System.out.println("接受服务器的消息:"+str); 27 s.close(); 28 } catch (Exception e) { 29 e.printStackTrace(); 30 } 31 } 32 public static void main(String[] args) { 33 Client client = new Client(); 34 client.send(); 35 } 36 }