Java中使用Socket发送Java对象实例

yizhihongxing

Java中使用Socket发送Java对象实例需要完成以下几个步骤:

  1. 序列化Java对象实例:将Java对象实例转换成字节流,以便在网络传输中能够被传输。

  2. 创建Socket连接:需要在发送方和接收方创建Socket连接,可以使用Socket类和ServerSocket类完成。

  3. 发送字节流:通过Socket连接,将序列化的Java对象实例以字节流形式发送给接收方。

  4. 反序列化Java对象实例:接收方接收到字节流后,需要将字节流反序列化成Java对象实例。

下面是Java中使用Socket发送Java对象实例的示例:

示例1:发送方

public class Sender {
   public static void main(String[] args) {
      try {
         // 写入对象
         ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("data.obj"));
         User user = new User("Tom", 18, "Beijing");
         objectOutputStream.writeObject(user);
         objectOutputStream.close();

         // 发送对象
         Socket socket = new Socket("localhost", 8888);
         FileInputStream fileInputStream = new FileInputStream("data.obj");
         OutputStream outputStream = socket.getOutputStream();
         byte[] buf = new byte[1024];
         int len;
         while ((len = fileInputStream.read(buf)) != -1) {
            outputStream.write(buf, 0, len);
         }
         socket.shutdownOutput();
         fileInputStream.close();
         outputStream.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

示例2:接收方

public class Receiver {
   public static void main(String[] args) {
      try {
         //读取对象
         ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("data.obj"));
         User user = (User) objectInputStream.readObject();
         objectInputStream.close();
         System.out.println(user.toString());

         //接收对象
         ServerSocket serverSocket = new ServerSocket(8888);
         Socket socket = serverSocket.accept();
         InputStream inputStream = socket.getInputStream();
         FileOutputStream fileOutputStream = new FileOutputStream("object.obj");
         byte[] buf = new byte[1024];
         int len;
         while ((len = inputStream.read(buf)) != -1) {
            fileOutputStream.write(buf, 0, len);
         }
         inputStream.close();
         fileOutputStream.close();
         socket.close();
         serverSocket.close();

         //反序列化对象
         ObjectInputStream objectInputStream1 = new ObjectInputStream(new FileInputStream("object.obj"));
         User user1 = (User) objectInputStream1.readObject();
         objectInputStream1.close();
         System.out.println(user1.toString());
      } catch (IOException | ClassNotFoundException e) {
         e.printStackTrace();
      }
   }
}

在示例中,我们通过一个User对象演示了如何在Java中使用Socket发送Java对象实例。首先,发送方需要将User对象序列化成字节流,然后通过Socket连接将字节流发送给接收方。接收方接收到字节流后,需要将字节流反序列化成User对象。通过上述示例,我们可以在Java中实现Socket通信并发送Java对象实例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中使用Socket发送Java对象实例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java获取时间的方法总结

    下面就是关于“java获取时间的方法总结”的详细攻略。 标题 介绍 在Java编程中,获取时间是非常常见的操作。本文将介绍Java中获取时间的方法,包括使用Java自带的类库和第三方类库。 使用Java自带的类库获取时间 Java自带了一个Date类,可以用于获取时间。 以下是获取当前时间的代码示例: import java.util.Date; publi…

    Java 2023年6月1日
    00
  • mybatis xml 中 大于、小于、等于 写法

    在 *.xml 中使用常规的 < > = <= >= 会与xml的语法存在冲突 方法一:使用xml 原生转义的方式进行转义 字符名称 sql符号 转义字符 大于号 > &gt; 小于号 < &lt; 不等于 <> &lt;&gt; 大于等于号 >= &gt;= 小于…

    Java 2023年4月25日
    00
  • java基础详细笔记之异常处理

    Java基础详细笔记之异常处理 在Java编程中,程序出现异常是经常发生的事情。如果程序出现异常而未被妥善处理,那么程序将会崩溃,导致应用程序无法继续运行。所以Java提供了异常机制,它允许我们在程序中去处理异常情况,从而使得程序可以正常地继续执行。 异常的分类 Java中将异常分为两类: 可查异常,如IO异常、SQL异常等。它们必须在程序中进行处理,否则编…

    Java 2023年5月19日
    00
  • JavaWeb Servlet技术及其应用实践

    JavaWeb Servlet技术及其应用实践 什么是Servlet? Servlet是JavaWeb中的一个组件,是JavaWeb中实现业务逻辑的重要方式之一。在JavaWeb中,Servlet让我们可以获取HTTP请求的参数、读写HTTP头信息、返回HTTP响应、写入HTTP头信息等。 Servlet的应用实践 基础应用 我们可以通过以下步骤使用Serv…

    Java 2023年5月20日
    00
  • java实现字符串和日期类型相互转换的方法

    Java实现字符串和日期类型相互转换的方法,可以利用Java内置的SimpleDateFormat类,通过指定的格式进行转换。 步骤一:定义日期格式 首先需要定义日期格式,日期格式指示了SimpleDateFormat类如何将字符串解析为日期对象或将日期对象格式化为字符串。以下是Java中日期格式化字符串的常用符号: yyyy – 年份,如2021 MM -…

    Java 2023年5月20日
    00
  • java中有关构造方法中的输出

    Java中的构造方法是一个特殊的方法,它用于创建并初始化一个对象时被调用。在构造方法中,我们可以执行各种初始化任务,如设置对象的默认属性、分配内存等。构造方法是在对象创建时自动调用的,并且和类名称相同。在构造方法中,我们可以输出信息来验证对象的创建和初始化过程。 在Java中,我们可以使用System.out.println()方法来输出消息。构造方法中输出…

    Java 2023年5月26日
    00
  • 你知道Java的这些骚操作吗?

    当然,没问题! 你知道Java的这些骚操作吗? 1. 位运算 位运算是一种直接对二进制位进行操作的运算,通常用于系统底层开发和优化计算速度。Java内置了多种位运算符,具体有: 按位与(&) 按位或(|) 按位异或(^) 取反(~) 左移位(<<) 右移位(>>) 无符号右移位(>>>) 示例 int a =…

    Java 2023年5月23日
    00
  • 浅谈springBean的作用域

    什么是Spring Bean作用域 Spring中的Bean作用域就是指一个Bean在Spring容器中的生命周期,Bean的作用域有很多种,常见的有单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)等。 Spring Bean作用域分类 Spring Bean作用域主要分为以下几类: Singleton(…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部