我需要通过套接字发送一些文件,我正在尝试弄清楚如何做到这一点。发送单个文件非常容易,但我需要在连接后发送一个表示文件唯一 ID 的整数,然后发送文件内容。完成后,我必须发送另一个 id 及其文件内容。所以我需要这样的东西:
- 连接
- 如果没有要发送的文件,请转到 6
- 发送 ID
- 发送文件
- 转到2
- 关闭连接
我发现的大多数发送文件的解决方案都使用 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/