【问题标题】:Sending and receiving data using Sockets使用 Socket 发送和接收数据
【发布时间】:2016-10-05 03:07:41
【问题描述】:

我正在尝试了解有关网络的更多信息,因此我决定使用套接字做一个小项目。我已经成功地创建了一个我知道非常基本的回声服务器。

下一步是将各种文件(文本文件、图像甚至视频?)从服务器发送到客户端,反之亦然。我一直在尝试使用 FIleOutputStream、ObjectOutputStream(显然还有输入),我什至尝试过 Byte Buffer,但通过阅读 Java 文档,我开始明白我对 Data 真的不太了解......

所以我的问题是:

  1. 我可以将所有类型的数据(文本、图像、视频)转换为字节,然后发送,然后将其全部转换为以前的数据,还是我需要为每种数据类型提供特定的函数?
  2. 能否将文本文件或图像转换为对象,然后使用 ObjectOutputFile 发送?如果是这样,那么我该如何在另一边解压呢?我已经尝试过 ObjectOutputFile.readObject,但我真的不知道之后该怎么做。

这是我一直在尝试做的(我不会发布所有代码,因为我相信只有这个特定部分很重要:

服务器:(out 是一个 DataOutputStream)

ObjectOutputStream oos = new ObjectOutputStream(out);

Path path = Paths.get("stuff/Folder.jpg");

byte[] data = Files.readAllBytes(path);

oos.write(data);

客户端(in 是 DataInputStream):

ObjectInputStream ois = new ObjectInputStream(in);

ois.readObject();

提前感谢所有帮助,如果您认为自己知道一篇文章或教程可以帮助我了解更多相关信息,那也会有所帮助!

【问题讨论】:

  • ois.readObject() 返回一个字节数组,与您在服务器上发送的相同,所以现在您需要再次将其写入文件 - 您的具体问题是什么?

标签: java sockets networking


【解决方案1】:

我可以将所有类型的数据(文本、图像、视频)转换为字节,发送它,然后将其全部转换为以前的数据吗?

当然。

或者我需要为每种类型的数据指定一个特定的函数吗?

这不是“或” - 如果您想自己将几种类型的数据转换为字节,那么您可能需要为每种类型使用单独的函数。请注意,如果您要发送文件,则不需要任何转换,因为文件的内容已经只是字节。

我可以将文本文件或图像转换为对象,然后使用 ObjectOutputFile 发送吗?

您可以使用 ObjectOutputStream 发送它。

如果是这样,那我如何在另一边解压呢?

使用 ObjectInputStream。

我已经尝试过 ObjectOutputFile.readObject,但我真的不知道之后该怎么做。`

Java 中没有 ObjectOutputFile.readObject 这样的方法。

【讨论】:

    【解决方案2】:
    1. 可以肯定的是,您可以将任何数据转换为字节。但是,问题是如何将其转换回来?通常,我们使用 Base64 编码器对图像进行编码,当客户端得到它时,我们可以通过 Base64 解码器将其转换回来。有很多方法可以做到这一点。请用谷歌搜索。
    2. 是的,您可以使用对象数据发送。您可能需要为对象定义一个新类,然后通过 getter 回调数据。在客户端,您需要将 Object 值声明为 ois.readObject()。喜欢:

      Object object = ois.readObject();

    只是补充一点建议,我觉得你现在对socket不太熟悉。所以,像Computer Networking(Kurose Ross) 这样的教科书会很有帮助。此外,如果您计划在 C 和 Java 之间传输数据,则不能使用 Object,因为 C 本身不支持它。

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2012-12-14
      相关资源
      最近更新 更多