java - 在同一套接字连接中发送具有文件 ID 的多个文件

标签 java sockets

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

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

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

最佳答案

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

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

例如

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

您可以根据需要在同一个 TCP 套接字上重复此操作多次。

接收端需要:

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

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

关于java - 在同一套接字连接中发送具有文件 ID 的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17293236/

相关文章:

JavaFX - MenuItem 和按钮的相同操作处理程序

java - 支持Sqlite的最简单的Java ORM是什么?

java - 如何使用 JaXB 获取验证事件?

Java 俄罗斯方 block - 在 grid[row][col] 和坐标 (x, y) 上混淆

c++ - 更改 linux 套接字文件权限

java - 带有 Java 客户端的 golang 服务器

c++ - 帮助在 Visual C++ Express 中进行链接

java - 网球比赛算法

windows - 使用套接字连接 linux 服务器和 windows 客户端时出现问题

java - JDK 1.7 DatagramSocket 未正确绑定(bind) IP 和端口