Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用套接字发送和接收数据_Java_Sockets_Networking - Fatal编程技术网

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

Java 使用套接字发送和接收数据,java,sockets,networking,Java,Sockets,Networking,我正在努力学习更多关于网络的知识,所以我决定用套接字做一个小项目。我已经成功地创建了一个echo服务器,我知道这是非常基本的 下一步是将各种文件(文本文件、图像甚至视频?)从服务器发送到客户端,反之亦然。我一直在尝试使用FIleOutputStream、ObjectOutputStream(显然还有input),甚至还尝试了字节缓冲区,但通过阅读Java文档,我开始明白我对数据的了解真的不多 因此,我的问题是: 我可以将所有类型的数据(文本、图像、视频)转换为字节,发送数据,然后将其全部转换为以

我正在努力学习更多关于网络的知识,所以我决定用套接字做一个小项目。我已经成功地创建了一个echo服务器,我知道这是非常基本的

下一步是将各种文件(文本文件、图像甚至视频?)从服务器发送到客户端,反之亦然。我一直在尝试使用FIleOutputStream、ObjectOutputStream(显然还有input),甚至还尝试了字节缓冲区,但通过阅读Java文档,我开始明白我对数据的了解真的不多

因此,我的问题是:

  • 我可以将所有类型的数据(文本、图像、视频)转换为字节,发送数据,然后将其全部转换为以前的数据,还是需要为每种类型的数据提供特定的功能
  • 我可以将文本文件或图像转换为对象,然后将其与ObjectOutputFile一起发送吗?如果是这样的话,我如何在另一边解压呢?我尝试过ObjectOutputFile.readObject,但我真的不知道之后该怎么办
  • 以下是我一直在尝试做的事情(我不会发布所有代码,因为我相信只有这一部分很重要:

    服务器:(out是一个DataOutputStream)

    客户端(中为DataInputStream):

    提前感谢所有的帮助,如果你认为你知道一篇文章或一个教程,可以帮助我了解更多这方面的知识,它也会有帮助

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

    当然

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

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

    我可以将文本文件或图像转换为对象,然后将其与ObjectOutputFile一起发送吗

    您可以使用ObjectOutput流发送它

    如果是这样的话,我如何在另一边解压呢

    使用ObjectInputStream

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

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

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

    Object Object=ois.readObject()

  • 只需添加一点建议,我觉得您现在对socket不太熟悉。因此,像这样的教科书会很有帮助。此外,如果您计划在C和Java之间传输数据,那么您就不能使用Object,因为C本身不支持它。

    ois.readObject()
    返回一个字节数组,与您在服务器上发送的字节数组相同,因此现在您需要再次将其写入文件-您的具体问题是什么?
    ObjectOutputStream oos = new ObjectOutputStream(out);
    
    Path path = Paths.get("stuff/Folder.jpg");
    
    byte[] data = Files.readAllBytes(path);
    
    oos.write(data);
    
    ObjectInputStream ois = new ObjectInputStream(in);
    
    ois.readObject();