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對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM