ServerSocket如何接收多个文件

时间:2019-05-29 18:28:53

标签: java java-8 serversocket

我有学习项目。我的老师不想告诉我如何解决接收多个文件的问题。我知道我需要使用getInputStream()函数,但不知道如何在inputStream对象中拆分这些文件。我需要拆分此inputStream,因为我需要将每个文件保存在文件夹中。

谢谢您的帮助,并向我解释了此问题。

2 个答案:

答案 0 :(得分:1)

答案是,您可能需要像HTTP或FTP这样的传输协议。但是,如果您不想要高水平的东西,您可以做的是tar,然后gzip您的文件,这就是人们过去在unix上所做的事情。 Tar基本上仍然是一种传输协议,但可能不如HTTP或FTP

答案 1 :(得分:0)

听起来您的老师希望您创建协议。您需要协议的原因是,如果您通过同一个套接字发送多个文件,则您将不知道一个文件何时停止而另一个文件何时开始。为了简化此问题,我将以一个简单的聊天应用程序为例,但是同样适用于文件。

假设您有一个聊天应用程序,只有2个用户(一个服务器到客户端)。每个用户可以发送任何长度的消息。假设User1要向User2发送以下消息(每行是一条消息)

{
  IPerson: {
    __resolveType: function ( parent, context, info ) {
      if ( parent.memberType ) {
        return 'ClubMember';
      }
      ...etc.
    }
  }
}

如果您通过套接字发送所有这些原始消息,则可能会收到 Hello User How are you doing today? 。现在您如何知道一条消息在哪里开始而另一条消息在哪里停止呢?

简单的解决方案是在每条消息之前发送一些内容,说明即将出现的消息中的字符长度,因此您的消息可能是

Hello UserHow are you doing today?

因此最终用户知道我读了一个告诉我11Hello User24How are you doing today? 的整数,然后读了<length>个字符以获取完整的消息。


现在,多数民众赞成在一个非常基本的例子,而不是超级好。让我们看一下我在视频游戏中看到的一种简单的数据包格式:

<length>

这是客户端和服务器之间使用的所有信息的基本格式。要读取的数据长度,一个数据包类型,然后是该数据包类型的数据。


对于您的用例,您可能需要类似的内容,即有关要发送的字节的某种元数据。 EG:文件长度,文件名。

我将从查看DataInputStream类开始,以轻松读取原始数据类型。

相关问题