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();
        }

    }
}
服务端结果

客户端结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于歌852

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值