bio编程

    科技2022-07-20  143

    BioServer

    /** * @author yun * 类说明:bio的服务端主程序 */ public class BioServer { //服务器端必须 private static ServerSocket server; //线程池,处理每个客户端的请求 private static ExecutorService executorService = Executors.newFixedThreadPool(5); private static void start() throws IOException{ try{ //通过构造函数创建ServerSocket //如果端口合法且空闲,服务端就监听成功 server = new ServerSocket(DEFAULT_PORT); System.out.println("服务器已启动,端口号:" + DEFAULT_PORT); while(true){ Socket socket= server.accept(); System.out.println("有新的客户端连接----" ); //当有新的客户端接入时,打包成一个任务,投入线程池 executorService.execute(new BioServerHandler(socket)); } }finally{ if(server!=null){ server.close(); } } } public static void main(String[] args) throws IOException { start(); } }

    BioServerHandler

    /** * @author yun * 类说明: */ public class BioServerHandler implements Runnable{ private Socket socket; public BioServerHandler(Socket socket) { this.socket = socket; } public void run() { try(//负责socket读写的输出、输入流 BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true)){ String message; String result; //通过输入流读取客户端传输的数据 //如果已经读到输入流尾部,返回null,退出循环 //如果得到非空值,就将结果进行业务处理 while((message = in.readLine())!=null){ System.out.println("Server accept message:"+message); result = response(message); //将业务结果通过输出流返回给客户端 out.println(result); } }catch(Exception e){ e.printStackTrace(); }finally{ if(socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } socket = null; } } } }

    BioClient

    /** * @author yun * 类说明:客户端 */ public class BioClient { public static void main(String[] args) throws InterruptedException, IOException { //通过构造函数创建Socket,并且连接指定地址和端口的服务端 Socket socket = new Socket(DEFAULT_SERVER_IP,DEFAULT_PORT); System.out.println("请输入请求消息:"); //启动读取服务端输出数据的线程 new ReadMsg(socket).start(); PrintWriter pw = null; //允许客户端在控制台输入数据,然后送往服务器 while(true){ pw = new PrintWriter(socket.getOutputStream()); pw.println(new Scanner(System.in).next()); pw.flush(); } } //读取服务端输出数据的线程 private static class ReadMsg extends Thread { Socket socket; public ReadMsg(Socket socket) { this.socket = socket; } @Override public void run() { //负责socket读写的输入流 try (BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()))){ String line = null; //通过输入流读取服务端传输的数据 //如果已经读到输入流尾部,返回null,退出循环 //如果得到非空值,就将结果进行业务处理 while((line=br.readLine())!=null){ System.out.printf("%s\n",line); } } catch (SocketException e) { System.out.printf("%s\n", "服务器断开了你的连接"); } catch (Exception e) { e.printStackTrace(); } finally { clear(); } } //必要的资源清理工作 private void clear() { if (socket != null) try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }

    常量类

    //服务器端口号 public static int DEFAULT_PORT = 12345; public static String DEFAULT_SERVER_IP = "127.0.0.1"; //返回给客户端的应答 public static String response(String msg){ return "Hello,"+msg+",Now is "+new java.util.Date( System.currentTimeMillis()).toString() ; }
    Processed: 0.010, SQL: 8