网络编程中,有时候我们需要传递的不仅仅是文本,也有可能是对象,我们的对象如果需要在客户端和服务器端进行传输,需要实现Serializable接口。案例如下:
第一步:传输对象之前,我们必须有对象,例如我们要传输一个Person对象。
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
第二步:创建一个服务器类,用于接受从客户端发送过来的对象。
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ObjectServer {
public static final int portNumber = 5321;
public ObjectServer() throws Exception {
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket socket = serverSocket.accept();
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
Object ob = input.readObject();
if (ob instanceof Person) {
Person p = (Person)ob;
System.out.println(p.getName() + "," + p.getAge());
}
}
public static void main(String[] args) {
try {
ObjectServer world = new ObjectServer();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第三步:创建一个客户端类,用于向服务器发送一个Person对象,最后在控制台打印姓名和年龄信息。
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class ObjectClient {
public static final int portNumber = 5321;
public ObjectClient() throws Exception {
Socket socket = new Socket(InetAddress.getLocalHost(), portNumber);
ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());
Person p = new Person();
p.setAge(22);
p.setName("MIKE");
outputStream.writeObject(p);
}
public static void main(String[] args) {
try {
ObjectClient client = new ObjectClient();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第四步:请先运行服务器端程序,接着运行客户端程序,最后控制台会打印Person对象的姓名和年龄。