Java中Socket通信-客户端与服务端相互传输对象数据
原创
©著作权归作者所有:来自51CTO博客作者霸道流氓的原创作品,请联系作者获取转载授权,否则将追究法律责任
场景
Java中Socket通信-服务端和客户端双向传输字符串实现
在上面实现服务端与客户端双向的通信传输字符串之后,客户端与服务端怎样相互传输对象数据。
注:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
在服务端的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对象。