场景

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方法

Java中Socket通信-客户端与服务端相互传输对象数据_客户端

 

需要注意

服务端先获得ObjectlnputStream对象,客户端就要先获得ObjectOutputStream对象;
服务端先获得ObjectOutputStream对象,客户端就要先获得ObjectInputStream对象。