惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
V
V2EX
B
Blog RSS Feed
有赞技术团队
有赞技术团队
博客园 - Franky
美团技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
云风的 BLOG
云风的 BLOG
L
LangChain Blog
GbyAI
GbyAI
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
The Register - Security
The Register - Security
大猫的无限游戏
大猫的无限游戏
D
Docker
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
博客园_首页
A
About on SuperTechFans
J
Java Code Geeks
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Recent Announcements
Recent Announcements
G
Google Developers Blog
小众软件
小众软件
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
F
Full Disclosure
Jina AI
Jina AI
H
Help Net Security

博客园 - KeithDan

Windows 8开发 WinRT 对ZIP文件解压缩及文件夹的ZIP压缩 wp应用发布,金宝贝点读 WP7游戏分裂细胞 WP7游戏方块夺宝 C#手工解析XML xeno tactic 2 完整版 Lua扫雷 惊人!天下奇闻“鹏” 今天很郁闷 HighLightCode1.2——开源项目 代码着色--关于循环与分组 代码着色--开源系列 利用非托管dll实现多平台加密 非托管dll的需要注意的地方 page_load执行两次 transfer object (2) transfer object (1) 中国象棋(网络版) 人生的阶梯
transfer object (3)
KeithDan · 2007-10-31 · via 博客园 - KeithDan

在UDP传输当中,我们对于文件的发送也是一个难点.
其中,难就难在发出去的包对方是否收到,这个就不得而知.上次我们说到可以对每个包进行编号,那么编号的意义在于传输的时候能准确定位于每个数据包.为了使对方准确收到包,那么我们在发送的以后同时要求对方回执一个确认包.
在我们的传输过程里,我们可以使用滑动窗口模式(当然,这个名字是我后来才听说的,呵呵),我们可以存储发送的包,记录其编号,假如我们发送了10个包,那么在我们的ArrayList存储体里可以记录如下
bag1:1
bag2:2
bag3:3
......
当我们每收到一个确认包,我们从存储体里移除一个记录的包.
那么如果我们发出去的包对方没有回执那怎么办呢?我们一直发送当前没收到的包吗?这些问题就是我们的重点.在这里,这种方案都不可取,为什么?
因为:如果我们一直对同一个包发送,而此时对方可能因为某种特殊原因而一直无法接收此位置的包,而我们发送端又无法偏移流位置,那么很可能造成程序的死锁.
我们既然已经记录了发送而未收到确认的包,那么在我们把包全部发送完毕以后,接下来要做的就是把这些发送未确认的包再次发送.直到该发送体内没有任何的包为止.当然,这里大家其实还可以发挥想象,如果是一个很大的文件呢?又或者网络极度恶劣呢?那么我们就应该创建发送缓冲区,这样文件被划分为多快区域,再次发送时仅是缓冲区内未确认的包而已.

下面是一个小的demo演示
在这里呢,在这里我加入了数据缓冲区,大家可以相互学习.
Demo Source