本文共 3978 字,大约阅读时间需要 13 分钟。
//服务端可以不断的发送信息给客户端 也可以不断的接受客户端的信息//多个客户端 一个服务器public class Client051 { static Scanner sc = new Scanner(System.in); static Socket socket; public static void main(String[] args) { //创建客户端套接字 用户交互服务器 try { socket = new Socket("127.0.0.1", 8005); System.out.println("客户端1开启"); //根据套接字获取输出流 把信息从内存拿出来就是输出 写进内存就是输入 new Thread(()->{ while (true) { try { DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String s = null; s = dataInputStream.readUTF(); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } } //获取服务端发过来的消息 }).start(); while (true) { OutputStream outputStream = socket.getOutputStream(); //将字节输出流包装成数据字节输出 DataOutputStream dataOutputStream = new DataOutputStream(outputStream); dataOutputStream.flush(); //这行代码的确定缺点 程序会阻塞在这里等待输入 dataOutputStream.writeUTF("客户端1说:"+sc.next()); } } catch (IOException e) { e.printStackTrace(); } }}
//服务端可以不断的发送信息给客户端 也可以不断的接受客户端的信息//多个客户端 一个服务器public class Server05 { //定义集合用来存放每一个客户端socket private static ListsocketList = new ArrayList<>(); static Scanner sc = new Scanner(System.in); static ServerSocket serverSocket; static Socket socket; public static void main(String[] args) { try { //创建服务端套接字ServerSocket 并指定端口号 serverSocket = new ServerSocket(8005); System.out.println("-------------------服务器开启-------------------"); //主线程用来不停的监听客户端 把客户端放进集合保存起来 while (true) { try { socket = serverSocket.accept();//因为我们要监听多个客户端 所以要将它放在循环里面 当客户端端建立连接后继续往下运行 socketList.add(socket);//有人连接到服务器 就将它的socket保存到list集合里面去 System.out.println("当前在线人数为:"+socketList.size());//用来记录与服务器连接的客户端数量 //创建一个新的线程不停的获取数据然后发送给每一个客户端 new Thread(()->{ boolean flag = false; Socket mySelf = null; while (true) { try { if(!flag) { mySelf = socket;//保证当前线程只拿到一个socket flag = true; } DataInputStream dataInputStream = new DataInputStream(mySelf.getInputStream()); String s = dataInputStream.readUTF(); for (Socket socketTemp : socketList) { if(mySelf == socketTemp) { continue; } DataOutputStream dataOutputStream = new DataOutputStream(socketTemp.getOutputStream()); dataOutputStream.writeUTF(s); dataOutputStream.flush(); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } catch (IOException e) { e.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } }}
转载地址:http://omhzi.baihongyu.com/