【问题标题】:Send multiple files with file id in a same socket connection在同一个套接字连接中发送具有文件 ID 的多个文件
【发布时间】:2013-06-25 09:05:01
【问题描述】:

我需要通过套接字发送一些文件,我正试图弄清楚如何去做。发送单个文件非常容易,但我需要在连接后发送一个表示文件唯一 ID 的整数,然后发送文件内容。完成后,我必须发送另一个 id 及其文件内容。所以我需要这样的东西:

  1. 连接
  2. 如果没有要发送的文件转到6
  3. 发送ID
  4. 发送文件
  5. 转到2
  6. 关闭连接

我发现的大多数发送文件的解决方案都使用 byte[] 作为缓冲区,我不知道如何区分 id 和文件内容。我能做什么?

【问题讨论】:

  • 如果你提前知道字节长度,你也可以发送那个长度。
  • @Fildor 不是这样的:(
  • 您可以随时打开新的套接字来发送新文件。

标签: java sockets


【解决方案1】:

您需要分隔 TCP 流,以便知道一个文件何时开始和结束。您需要创建自己的协议。

要做的一个简单的事情是首先发送一个带有文件ID和文件大小的固定长度的小标题。

例如

  • 发送 'file-id' 一个 4 字节的文件 id
  • 发送 'file-size 一个 8 字节的文件大小
  • 发送文件内容,“文件大小”字节。

这可以在同一个 TCP 套接字上重复多次。

接收端需要:

  • 读取 4 个字节,将其解释为 file-id
  • 读取 8 个字节,将其解释为文件大小
  • 读取“文件大小”(来自上一步)字节,即文件内容。

一旦接收到所有字节,它可以重新开始,读取文件ID和文件大小的新标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多