Advertisement

Socket 服务端持续发送,客户端持续接收 通信实例

阅读量:

服务端代码
持续向客户端发送消息

复制代码
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            Socket socket = null;
            InputStream inputStream = null;
            OutputStream outputStream = null;
            //从请求队列中取出链接
            socket = serverSocket.accept();
            //获取客户端信息
            inputStream = socket.getInputStream();
            //回复客户端
            outputStream = socket.getOutputStream();
            //字节数组
            byte[] bytes = new byte[1024];
            //字节数组长度
            int len;
            int i = 1;
            boolean isLogin = false;
            while(true){
                //读取客户端请求信息
                while (inputStream.available() != 0 && (len = inputStream.read(bytes)) != -1) {
                    //接收到的消息
                    String s = new String(bytes, "utf-8");
                    //这里你可以根据你的实际消息内容做相应的逻辑处理
                    System.out.println("服务端收到客户端消息:" + s);
                    if(s.contains("链接上了")){
                        isLogin = true;
                    }
                }
                if(isLogin){
                    outputStream.write(("服务端发送消息" + i).getBytes());
                    i++;
                    Thread.sleep(5000);
                }
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }

下面是客户端代码 只用来接收消息并处理消息

复制代码
    public static void main(String[] args) {
        try {
            //你的ip,你的端口
            Socket socket = new Socket("192.168.161.125", 8888);
            //获取输出流
            OutputStream outputStream = socket.getOutputStream();
            //发送链接成功的消息
            outputStream.write("客户端链接上了".getBytes());
            //获取输入流
            InputStream is = socket.getInputStream();
            byte[] inputBytes = new byte[1024];
            int len;
            //监听输入流,持续接收
            while(true){
                while (is.available() != 0 && (len = is.read(inputBytes)) != -1 ) {
                    //消息体
                    String s = new String(inputBytes, "utf-8");
                    System.out.println("客户端接收到消息:" + s);
                    //下边可以对接收到的消息进行处理
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

客户端和服务端通信一般都是客户端首先发送登录请求,服务端判断登录成功后才会向客户端发送消息,客户端一般都作为消息的接收者,当然你也可以在客户端接收到消息后对消息进行处理。比如我所做的项目中,我要根据服务端响应的消息头中的消息类型来对接收到的消息做不同的处理。

欢迎大家多多指教。

全部评论 (0)

还没有任何评论哟~