繁体   English   中英

使用套接字发送和接收数据

[英]Sending and receiving data using Sockets

我想了解更多关于网络的知识,所以我决定使用套接字做一个小项目。 我已经成功地创建了一个我知道非常基本的回声服务器。

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

所以我的问题是:

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

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

服务器:(输出是一个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();

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

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

当然。

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

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

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

您可以使用 ObjectOutput Stream发送它。

如果是这样,那么我如何在另一侧解压缩它?

使用 ObjectInputStream。

我试过 ObjectOutputFile.readObject 但我真的不知道在那之后该怎么做。`

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

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

    对象对象 = ois.readObject();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM