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/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/13640084.html