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