序列化一个对象并通过socket发送至客户端实现用例

在做多用户通讯系统时,需要将信息以对象的方式通过对象流传输,才可保证接收端能恢复出数据及其类型。以下通过一个简单示例学习将一个对象序列化,通过socket发送至客户端,并在客户端将数据显示。

服务器端实现代码:

/*** @author JJLin* @date 2022/2/25* 本用例用来复习socket获取流对象并通过网络传输的一些细节* (1)客户端发送消息给服务器端* (2)服务器端发送一个dog对象给客户端*/
public class Server {public static void main(String[] args) throws IOException {//接收消息ServerSocket serverSocket = new ServerSocket(8008);Socket socket = serverSocket.accept();InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = "";while ((line = br.readLine()) != null) {System.out.print(line);}//发送Dog对象OutputStream os = socket.getOutputStream();ObjectOutputStream oos = new ObjectOutputStream(os);oos.writeObject(new Dog("大黄",4));//关闭资源socket.close();serverSocket.close();br.close();oos.close();}
}class Dog implements Serializable {private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}

服务器端实现代码:

/*** @author JJLin* @date 2022/2/25* 本用例用来复习socket获取流对象并通过网络传输的一些细节* (1)客户端发送消息给服务器端* (2)服务器端发送一个dog对象给客户端*/
public class Client {public static void main(String[] args) throws IOException, ClassNotFoundException {Socket socket = new Socket(InetAddress.getLocalHost(), 8008);//发送消息OutputStream os = socket.getOutputStream();BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));bw.write("hello服务器@");//bw.newLine();bw.flush();socket.shutdownOutput();//接收dogInputStream is = socket.getInputStream();ObjectInputStream ois = new ObjectInputStream(is);Dog dog = (Dog) ois.readObject();System.out.println(dog.toString());//关闭资源socket.close();bw.close();ois.close();}
}

结果显示:

Socket编程需要IO流知识的支撑,在学习IO流时,需要区分好各种IO流,分清楚哪些是字符流、字节流、转换流、节点流以及处理流(包装流),需注意:包装流需要传入一个相应的节点流。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部