场景
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对象。