Java模拟客户端与服务端的通信

模拟聊天室–做到当前在客户端和服务器之间进行数据通信(文本)

自定义一个 Socket 的服务端 一定要指定当前服务端的端口号服务端要在当前的端口号进行监听 客户端的访问
先启动服务端后启动客户端进行通信
服务端
public class ServiceTalk {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            ServerSocket ss = new ServerSocket(8888);
            System.out.println("服务器启动,等待客户端连接...");
            //指定监听  accept() 会阻塞当前的线程  直到客户端进行访问
            Socket s = ss.accept();

            while(true){
    
    
                //读取数据的输入流
                BufferedReader br  = new BufferedReader(
                        new InputStreamReader(s.getInputStream()));
                //向客户端输入流  打印流
                PrintWriter pw = new PrintWriter(
                        new OutputStreamWriter(s.getOutputStream()));
                //对应客户端的输出流  服务器端需要使用输入流 底层都是字节流
                BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
                String str = null;
                if(null != (str =br.readLine()) && !"exit".equals(str)){
    
    
                    //正常读取
                    System.out.println(s.getInetAddress().getHostAddress()+":"+s.getPort()+"-客户端的消息为。。"+str);
                    //控制台输入的信息
                    System.out.println("服务器:");
                    String info = console.readLine();
                    pw.println(info);
                    pw.flush();
                }else{
    
    
                    System.out.println("聊天结束,服务端进行关闭");
                    System.exit(0);
                    //关闭Socket之后  会自动关闭该套接字所涉及到的所有流
                    s.close();
                }

            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}
客户端
public class ClientTalk {
    
    
    public static void main(String[] args) {
    
    
         /*自定义客户端--模拟向服务器发送信息 客户端要指明--向那个服务器发送信息(IP)以及当前服务器上那个应用在等待接收当前消息(port)*/
        try {
    
    
            //在计算机内部会维护一个本地地址  127.0.0.1  或者  localhost
            Socket s = new Socket("127.0.0.1", 8888);
            System.out.println("客户端已启动,可以开始聊天...");
            while(true){
    
    
                //获取当前服务端发送过来的信息
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                //获取客户端向外输出的流
                PrintStream pw = new PrintStream(s.getOutputStream());
                //获取客户端的控制台流信息
                BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
                System.out.println("客户端:");
                String info = console.readLine();
                pw.println(info);
                pw.flush();

                //读取服务器端信息
                String str = null;
                if((str = br.readLine()) != null && !str.equals("exit")){
    
    
                    System.out.println(s.getInetAddress().getHostAddress()+":"+s.getPort()+"-服务器消息.."+str);
                }else{
    
    
                    System.out.println("聊天结束,客户端开始关闭");
                    System.exit(0);
                }

            }
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

    }
}
服务端结果

客户端结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_56287335/article/details/126764875