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

时间:2016-10-05 03:07:42

标签: java sockets networking

我正在尝试更多地了解网络,所以我决定使用套接字做一个小项目。我已经成功创建了一个我知道非常基本的echo服务器。

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

所以我的问题是:

  1. 我可以将所有类型的数据(文本,图像,视频)转换为字节,发送它然后将其全部转换为以前的数据,还是我需要针对每种类型的数据使用特定的功能?
  2. 我可以将文本文件或图像转换为Object,然后使用ObjectOutputFile发送它吗?如果是这样,我怎么能在另一边解压缩?我已经尝试过ObjectOutputFile.readObject但我真的不知道该怎么做。
  3. 这就是我一直在尝试做的事情(我不会发布所有代码,因为我认为只有这个特殊部分很重要:

    服务器:(输出是DataOutputStream)

    ObjectOutputStream oos = new ObjectOutputStream(out);
    
    Path path = Paths.get("stuff/Folder.jpg");
    
    byte[] data = Files.readAllBytes(path);
    
    oos.write(data);
    

    client(in是一个DataInputStream):

    ObjectInputStream ois = new ObjectInputStream(in);
    
    ois.readObject();
    

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

2 个答案:

答案 0 :(得分:1)

  

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

不确定

  

或者我是否需要针对每种类型的数据使用特定功能?

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

  

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

您可以使用ObjectOutput 发送它。

  

如果是,那我怎么能在另一方面解压缩呢?

使用ObjectInputStream。

  

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

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

答案 1 :(得分:0)

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

    Object object = ois.readObject();

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