zoukankan      html  css  js  c++  java
  • Java中Socket通信-客户端与服务端相互传输对象数据

    场景

    Java中Socket通信-服务端和客户端双向传输字符串实现:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108488556

    在上面实现服务端与客户端双向的通信传输字符串之后,客户端与服务端怎样相互传输对象数据。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    在服务端的Java项目中新建UserInfo对象

    package com.badao;
    
    import java.io.Serializable;
    
    public class UserInfo implements Serializable {
        private long id;
        private String username;
        private String password;
    
        public UserInfo() {
        }
    
        public UserInfo(long id, String username, String password) {
            this.id = id;
            this.username = username;
            this.password = password;
        }
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }

    然后在main方法的下面新建交换对象的方法

        //服务端与客户端交换对象数据
        public static void exchangeObject() throws IOException, ClassNotFoundException {
            ServerSocket serverSocket = new ServerSocket(8088);
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();
    
            ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
    
            for(int i=0;i<5;i++){
                UserInfo userInfo = (UserInfo) objectInputStream.readObject();
                System.out.println("在服务端打印" + (i + 1) + ":" + userInfo.getId() + " " + userInfo.getUsername() + " " + userInfo.getPassword());
                UserInfo newUserInfo = new UserInfo();
                newUserInfo.setId(i+1);
                newUserInfo.setUsername("公众号:霸道的程序猿"+(i+1));
                newUserInfo.setPassword("密码"+(i+1));
    
                objectOutputStream.writeObject(newUserInfo);
    
            }
                objectOutputStream.close();
                objectInputStream.close();
    
                outputStream.close();
                inputStream.close();
                socket.close();
                serverSocket.close();
        }

    然后在main方法中调用该方法。

    再来到客户端的java项目,同样新建一个UserInfo类,同上面一样。

    然后在main方法下新建一个同服务端交换数据的方法

        //服务端与客户端交换对象数据
        public static void exchangeObject() throws IOException, ClassNotFoundException {
    
            Socket socket = new Socket("localhost",8088);
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();
    
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
            ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
    
    
            for(int i=0;i<5;i++){
                UserInfo newUserInfo = new UserInfo();
                newUserInfo.setId(i+1);
                newUserInfo.setUsername("公众号:霸道的程序猿"+(i+1));
                newUserInfo.setPassword("密码"+(i+1));
    
                objectOutputStream.writeObject(newUserInfo);
    
                UserInfo userInfo = (UserInfo) objectInputStream.readObject();
                System.out.println("在客户端打印" + (i + 1) + ":" + userInfo.getId() + " " + userInfo.getUsername() + " " + userInfo.getPassword());
    
            }
    
                objectOutputStream.close();
                objectInputStream.close();
    
                outputStream.close();
                inputStream.close();
                socket.close();
        }

    然后在main方法中调用该方法。

    然后依次运行服务端的main方法和客户端的main方法

    需要注意

    服务端先获得ObjectlnputStream对象,客户端就要先获得ObjectOutputStream对象;
    服务端先获得ObjectOutputStream对象,客户端就要先获得ObjectInputStream对象。

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    第一次博客作业
    自我介绍
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    Alpha冲刺
    Alpha冲刺 (2/10)
    Alpha 冲刺 (1/10)
    福大软工 · 第七次作业
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/13640084.html
Copyright © 2011-2022 走看看