TCP基于字节流是如何实现多文件传输的? 5C

前几天面试,遇到一个问题,如何使用TCP设计一个批量文件传输系统。

由于TCP是基于字节流的,那么服务端收到源源不断的字节流之后,如何对字节流进行区分,从而还原成不同的文件?

也就是说,应用层的进程如何区分哪些字节是属于文件1,哪些字节是属于文件2的?

2个回答

你需要自己定义一种协议格式,每个文件的文件名,文件长度,以及真正的内容。接收端根据前两者来判断真正内容中多少字节属于哪个文件

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复大笨鸟飞快点: 当然最简单的是你说的先传输完第一个文件,再传输第二个文件,不过万一中间错了一个,就白传了。所以你还可以给你的协议加上校验控制之类的东西。
大约 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复大笨鸟飞快点: 你可以自己制定协议。如果你愿意,甚至可以断点续传,那么根本不用考虑顺序
大约 2 年之前 回复
l403040463
大笨鸟飞快点 回复caozhy: 那是不是先传输完第一个文件,再传输第二个文件?
大约 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复大笨鸟飞快点: 比如说前4个字节表示文件的长度,后面是这个文件,再4个字节表示第二个文件的长度,等等
大约 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复大笨鸟飞快点: 你需要自己定义一种协议格式
大约 2 年之前 回复
l403040463
大笨鸟飞快点 例如传输两个文件A B,最终接收方进程收到的字节流是A1B1A2B2,如何还原为A和B?其中A1、A2是TCP根据拥塞窗口和发送窗口等对文件A进行切片而形成的两个报文段,B1和B2同理
大约 2 年之前 回复
l403040463
大笨鸟飞快点 但是TCP是基于字节流的,接收方应用层收到的是多个文件混合的字节流,如何从中识别出哪部分字节流是属于哪个文件呢?
大约 2 年之前 回复

自己定义包序号,收到后按序号重新合并

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!