用Java从0开始实现Socket编程视频直播通信03—————实现自定义客户端

前面的几篇我们已经实现了一些简单通信的基本功能,现在我们来写一个自定义的客户端,这样就不需要telnet了,可以直接在环境下同时运行服务端和多个客户端

首先,依照之前学过的内容创建客户端

package com.clclient0809;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

// 自定义客户端类
public class MClient {
    public static void main(String[] args) {
        try {
            // 创建并启动客户端
            new MClient().creatClient();
        } catch (Exception e) {
            // 捕获异常并抛出运行时异常
            throw new RuntimeException(e);
        }
    }

    // 创建客户端的方法
    public void creatClient() throws Exception {
        // 创建一个Socket对象,连接到服务器的本地IP地址127.0.0.1,端口为8899
        Socket socket = new Socket("127.0.0.1", 8899);
        OutputStream os = socket.getOutputStream(); // 获取输出流,用于向服务器发送数据
        InputStream is = socket.getInputStream(); // 获取输入流,用于接收服务器发送的数据

        // 启动一个新线程,持续读取服务器发送的消息
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        // 调用方法读取服务器的消息
                        String msg = readMsg(is);
                        // 打印服务器发送的消息
                        System.out.println("server:" + msg);
                    } catch (Exception e) {
                        // 捕获异常并抛出运行时异常
                        throw new RuntimeException(e);
                    }
                }
            }

            // 读取服务器发送的消息
            public String readMsg(InputStream inputStream) throws Exception {
                StringBuilder stringBuilder = new StringBuilder();
                int b = 0;
                // 持续读取输入流中的数据,直到遇到回车符(ASCII 13)
                while ((b = inputStream.read()) != 13) {
                    // 将读取到的字符拼接到StringBuilder中
                    stringBuilder.append((char) b);
                }
                // 返回完整的消息,去除前后空格
                return stringBuilder.toString().trim();
            }
        }).start();

        // 主线程负责发送数据到服务器
        Scanner scanner = new Scanner(System.in);
        while (true) {
            // 提示用户输入消息
            System.out.println("client:");
            String str = scanner.nextLine();
            // 发送用户输入的消息到服务器,添加回车符作为消息结束符
            os.write((str + "\r\n").getBytes());
        }
    }
}

服务端的内容与专栏中02篇的代码一致,忘记的同学可以回去01篇02篇复习一下

02篇

01篇

然后根据图片最上面红圈位置,点击编辑配置,并点击第二个红圈修改允许多个实例存在,这是同时运行服务端和服务端的前提

接下来测试一下客户端是否有问题,先打开之前的服务端MServer点击运行,然后打开刚刚写的MClient运行,我这里示范运行3个

看上面的一个服务端和3个客户端都处于运行状态,接着我们测试私聊的功能,在Client3中向Client1发送消息,然后观察Client1和Client2

Client2没有收到消息

Client1收到了Client3的消息

再尝试群聊的功能

Client3发送消息

其它两个客户端已经服务端都收到了消息。

这样,就实现了自定义客户端的创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值