• io流+网络+线程池 实现简单的多客户端与服务器端通信


     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.io.OutputStream;
     4 import java.net.Socket;
     5 import java.util.Scanner;
     6 //客户端要做的事就是 读出服务器端输出的信息,将要说的话写到服务器端
     7 public class Client {
     8 public static void main(String[] args) {
     9     Socket client = null;
    10     OutputStream os  =null;
    11     InputStream is = null;
    12     Scanner sc= new Scanner(System.in);
    13     
    14     try {
    15         client= new Socket("127.0.0.1",5000);
    16         String address = client.getInetAddress().getHostAddress();
    17         is = client.getInputStream();
    18         int len=0;
    19         byte []b = new byte[1024];
    20         len=is.read(b, 0, b.length);
    21         System.out.println(new String(b,0,len));
    22         os = client.getOutputStream();
    23         String sendMsg=sc.next();
    24         os.write(sendMsg.getBytes());
    25         while(true) {
    26             len=is.read(b, 0, b.length);
    27             String msg = new String(b,0,len);
    28             System.out.println(msg);
    29             String send = sc.next();
    30             os.write(send.getBytes());
    31             os.flush();
    32             if(send.contains("bye")) //判断写出的字符串中是否包含bye 包含则退出
    33             {
    34                 break;
    35             }
    36         }
    37         
    38     } catch (Exception e) {
    39         e.printStackTrace();
    40     }finally {
    41         try {
    42             is.close();
    43             os.close();
    44             client.close();
    45         } catch (IOException e) {
    46             // TODO Auto-generated catch block
    47             e.printStackTrace();
    48         }
    49     }
    50 }
    51 }

     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.io.OutputStream;
     4 import java.net.ServerSocket;
     5 import java.net.Socket;
     6 import java.util.Scanner;
     7 import java.util.concurrent.ExecutorService;
     8 import java.util.concurrent.Executors;
     9 //服务器端接收多个客户端的连接 并处理每个连接要做的事情
    10 public class Server {
    11     public static ServerSocket server;
    12     public static Socket client;

            //静态代码块只执行一次 跟随类加载
            //非静态匿名代码块 每次都跟随对象加载

    13     static {
    14         try {
    15             server = new ServerSocket(5000);
    16             System.out.println("服务器端已经创建,开放端口为5000");
    17         } catch (IOException e) {
    18             // TODO Auto-generated catch block
    19             e.printStackTrace();
    20         }
    21     }
    //使用的线程池是newCachedThreadPool
    22 public static void main(String[] args) { 23 ExecutorService exe = Executors.newCachedThreadPool(); 24 while(true) { 25 try { 26 client= server.accept(); 27 exe.execute(new SocketThread(client)); 28 29 30 } catch (IOException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 } 35 } 36 37 } 38 class SocketThread extends Thread { 39 Scanner sc= new Scanner(System.in); 40 private Socket s = null; 41 private InputStream is= null; 42 private OutputStream os= null; 43 public SocketThread(Socket s) { 44 this.s = s ; 45 46 } 47 @Override 48 public void run() { 49 try { 50 os = s.getOutputStream(); 51 os.write("你好 请输入你的名字".getBytes()); 52 os.flush(); 53 is=s.getInputStream(); 54 byte []b = new byte[1024]; 55 int len=is.read(b, 0, b.length); 56 //为线程设置名字 57 setName(new String (b,0,len)); 58 os.write("恭喜设置昵称成功,我们开始聊天吧".getBytes()); 59 os.flush(); 60 while(true) { 61 len=is.read(b, 0, b.length); 62 String msg = new String(b,0,len); 63 if(msg.contains("bye")) { 64 break; 65 } 66 System.out.println(getName()+":"+msg); 67 String send =sc.next(); 68 os.write(send.getBytes()); 69 os.flush(); 70 71 } 72 73 } catch (Exception e) { 74 // TODO: handle exception 75 } 76 finally { 77 try { 78 os.close(); 79 is.close(); 80 s.close(); 81 } catch (IOException e) { 82 // TODO Auto-generated catch block 83 e.printStackTrace(); 84 } 85 } 86 } 87 }
  • 相关阅读:
    jquery练习(赋予属性值)
    jquery练习
    jquery表单对象属性选择器
    jquery表单选择器
    jquery子元素选择器
    jquery属性选择器(同时匹配多个条件)
    jquery属性选择器
    jquery属性选择器(匹配具有指定属性的元素)
    jquery可见性选择器(综合)
    方法的递归
  • 原文地址:https://www.cnblogs.com/jamers-rz/p/13604379.html
Copyright © 2020-2023  润新知