使用对象流传输Student类

上一篇博客已经介绍了如何通过定义原始的字节流来传输Student类,我们接下来继续练习如何通过对象流传输Student类。
因为通过对象流传输的对象以及所包含的变量都必须要实现Serializable的接口,所以为了方便,我把上篇博客的Student类的Image变量改成了二维数组。

Student类

为了便于观察二维数组的传输是否成功,重写toString方法时,输出二维数组的两个数据。

package RPC.v2.myTest01;

import java.io.Serializable;

public class Student implements Serializable {
    int id;
    String name;
    long liveing;
    int[][] image;

    public Student(int id, String name, long liveing, int[][] image) {
        this.id = id;
        this.name = name;
        this.liveing = liveing;
        this.image = image;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", liveing=" + liveing +
                ", image[0][0]=" + image[0][0] + "  image[0][1]=" + image[0][1] +
                '}';
    }
}

客户端

每隔1s新建一个Student对象,输出到控制台,再向服务端发送

package RPC.v2.myTest01;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.Socket;
import java.util.Random;

import static java.lang.Thread.sleep;

/**
* @author liTianLu
* @Date 2022/8/5 16:57
* @purpose 自定义协议,客户端给服务端发送一个Student对象
*/
public class Client {
    public static void main(String[] args) {
        try {
            Socket client = new Socket("127.0.0.1",9999);
            System.out.println("已连接到服务端端口9999...");
            OutputStream ous = client.getOutputStream();
            InputStream ins = client.getInputStream();
            ObjectOutputStream oous = new ObjectOutputStream(ous);
            //初始化image二维数组
            int w = 3; int h = 4;
            int[][] img = new int[w][h];
            Random ran = new Random();
            int id = 1;
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    img[i][j] = ran.nextInt(10000);
                }
            }

            while(true){

                Student stu = new Student(id++,"李天路",2100000000,img);
                // System.out.println("创建Student对象成功!");
                oous.writeObject(stu);
                 System.out.println("成功发送对象stu: " + stu);
                stu.id++;

                sleep(1000);
            }

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

}

服务端

接收客户端传来的Student对象,并输出,观察其与客户端输出是否一致

package RPC.v2.myTest01;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {

        try {
            ServerSocket serverSocket = new ServerSocket(9999);
            System.out.println("端口9999正在监听中。。。");
            Socket client = serverSocket.accept();
            System.out.println("客户端端口"+client.getPort()+"已经连接");
            OutputStream ous = client.getOutputStream();
            InputStream ins = client.getInputStream();
            ObjectInputStream oins = new ObjectInputStream(ins);

            while(true){
                Student stu = (Student) oins.readObject();
                System.out.println("收到来自"+client.getPort()+"的stu对象:" + stu );
            }
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

运行结果:

客户端

使用对象流传输Student类

服务端

使用对象流传输Student类

Original: https://www.cnblogs.com/classicltl/p/16557279.html
Author: classic123
Title: 使用对象流传输Student类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/711031/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot-Redis

    SpringBoot 整合 Redis SpringBoot-Redis 15.1 导入相关依赖 org.springframework.boot spring-boot-star…

    技术杂谈 2023年6月21日
    096
  • 从输入URL到页面加载完成的过程中都发生了什么事情?

    当你在浏览器中输入URL并敲回车之后,浏览器会把URL分成几部分: 1、协议:从计算机获取资源的方式,常见的HTTP、FTP等 2、网络地址:域名或者IP,指示网络中的哪一台计算机…

    技术杂谈 2023年5月31日
    089
  • cc/animation

    core/animation This directory contains the main thread animation engine. This implements t…

    技术杂谈 2023年5月31日
    079
  • 《商业模式新生代》笔记

    一、组织商业模式画布 为便于理解现有的商业模式,你可以问自己这样两个问题。 我们的客户是谁? 客户需要我们完成哪些工作? 商业模式的九大组成模块 客户群体(Customers) 客…

    技术杂谈 2023年5月31日
    0121
  • kindeditor编辑器微软雅黑样式font-family值变成”

    http://www.100cm.cn/article-126-764.html kindeditor编辑器中选中文字, 修改字体(字体名称中带有空格, 例如”Micr…

    技术杂谈 2023年5月30日
    0106
  • 浅谈kali : aircrack-ng套件

    aircrack-ng 套件包含有: Name Description aircrack-ng 破解WEP以及WPA(字典攻击)密钥 airdecap-ng airmon-ng 将…

    技术杂谈 2023年7月25日
    0104
  • Trojan

    正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性… Original: https://www.cnblogs.com/sevenyuan/p/…

    技术杂谈 2023年6月1日
    0108
  • golang实现一个简单的websocket聊天室

    基本原理:1.引入了 golang.org/x/net/websocket 包。2.监听端口。3.客户端连接时,发送结构体: {“type”:”…

    技术杂谈 2023年7月24日
    082
  • JAVA设计模式-桥接模式

    JAVA设计模式-桥接模式 一、介绍 桥接模式是一种结构型模式,它主要是将抽象部分和实现部分进行分离,可以独立变化,降低类与类之间的耦合度。举例:我们现在需要实现不同形状,每个形状…

    技术杂谈 2023年6月21日
    0131
  • C#开源磁盘/内存缓存引擎

    增加了对批量处理的支持,写操作速度提升5倍,读操作提升100倍 增加了一个存储provider,可以选择不用STSdb做存储,而用物理文件/Dictionary。 增加了空间回收 …

    技术杂谈 2023年5月30日
    0112
  • 【AGC】构建服务1-云函数示例

    前言:上一次笔者给大家带来了AGC 领域的远程配置服务的学习。这次我们再继续深化学习AGC 的相关知识。在文章开始之前,再给读者简单介绍一下AGC ,以免第一次来的读者不了解。所谓…

    技术杂谈 2023年5月31日
    090
  • 武林头条-建站小能手争霸赛

    好话说在前头 如果你 想在自己的主机上 搭建一个属于自己的、独一无二的博客 想学会自主安装WordPress 掌握CentOS常用命令 可以在WordPress上自主安装主题和插件…

    技术杂谈 2023年7月11日
    085
  • cocos 碰撞系统

    前面的话 本文将简要介绍 Cocos Creator 中的碰撞系统,Cocos Creator 内置了一个简单易用的碰撞检测系统,支持圆形、矩形以及多边形相互间的碰撞检测 编辑碰撞…

    技术杂谈 2023年5月30日
    0120
  • html大文件传输问题

    随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。 但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往…

    技术杂谈 2023年5月30日
    099
  • 设计模式 16 命令模式

    命令模式(Command Pattern)属于 行为型模式 概述 现在各大电子厂商都在推智能家居,即可以通过手机这一个终端控制多个家用电器,比之前的单个设备智能由对应遥控器控制的方…

    技术杂谈 2023年7月25日
    0101
  • HIT软构博客6-设计模式

    设计模式可以分为1.创建型模式 2.结构型模式 3.行为类模式 1.创建型模式 ​ 工厂方法模式 ​ 当client不知道要创建哪个类的具体实例或不想在客户端代码指明要创建具体哪个…

    技术杂谈 2023年7月11日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球