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

推荐订阅源

S
Secure Thoughts
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Securelist
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
C
CERT Recently Published Vulnerability Notes
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
SegmentFault 最新的问题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
WordPress大学
WordPress大学
I
Intezer
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
C
Check Point Blog
A
About on SuperTechFans
AWS News Blog
AWS News Blog
Latest news
Latest news
宝玉的分享
宝玉的分享
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
SecWiki News
SecWiki News
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
A
Arctic Wolf
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
V
V2EX
Scott Helme
Scott Helme
I
InfoQ
Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
Recent Announcements
Recent Announcements
Spread Privacy
Spread Privacy
Attack and Defense Labs
Attack and Defense Labs
大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
N
News and Events Feed by Topic
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
NISL@THU
NISL@THU
L
LangChain Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 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