登录
首页 » Others » Android MediaPlayer与Http Proxy结合之优化篇

Android MediaPlayer与Http Proxy结合之优化篇

于 2020-06-27 发布
0 251
下载积分: 1 下载次数: 0

代码说明:

本文是在《玩转 Android MediaPlayer之视频预加载(优化)》基础上修复Http代理服务器(Http Proxy()透传的bug。前面几篇相关文章所用的代理服务器一个时间只能监听来自Mediaplayer的一个Request请求,但在实际项目开发过程中,发现有些支持m3u8格式Mediaplayer发出新的Request请求之前不会中断旧的Request请求,所以本文代码会加入多线程监听Request请求。

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • 计算机毕业论文设计---基于Android的网上订餐系统.doc )
    计算机毕业论文设计---基于Android的网上订餐系统.doc 。详细介绍了网上订餐系统的需求分析、总体设计、详细设计,包含部分核心代码。值得下载
    2020-12-03下载
    积分:1
  • 全国飞机航班数据库
    本站每几天不定期更新全国飞机航班数据库(如有重大变动会立即更新)以确保全国飞机航班数据库始终保持在最新状态,目前全国飞机航班数据库已经是最新时刻表状态。由于全国飞机航班数据库由程序运行得出,可能与实际会存在出入,票价请以当地全国飞机航班数据库公告为准,全国飞机航班数据库数据仅供参考。最新列车时刻表数据测试请访问:http://www.enet521.com/train/index.html
    2020-12-06下载
    积分:1
  • 蒙特卡罗方法MCMC(里面有应用实例)
    蒙特卡罗方法MCMC(里面有应用实例),个人认为有较强的可读性,还有相应的实例讲解。
    2020-11-27下载
    积分:1
  • CVI访数据库的实例
    一个利用CVI通过ODBC访问数据库的完整例子,里面包含数据库,程序已调通,可对数据库进行查找,修改,添加和删除,适合想用CVI访问数据库的初学者学习参考
    2020-12-12下载
    积分:1
  • SVPWM三相逆变 MATLAB Simulink仿真模型 S-Function C语言写 PI控制
    SVPWM三相逆变 MATLAB Simulink仿真模型 S-Function C语言编写 PI控制
    2021-05-06下载
    积分:1
  • RTKLIB精密单点定位代码(支持北斗、GPS).rar
    为初学者做RTKlib精密单点定位PPP提供一定的参考(更改后的代码),支持北斗、GPS 三频、双频以及组合PPP,误差项仍需改正
    2019-09-01下载
    积分:1
  • MATLAB小波三级分解图像
    首先把图片倒入MATLAB,利用小波基对图像进行三层分解。第一次分解产生一个高频,三个低频,第二次对第一次产生的高频分解,产生一个低频三个高频;第三次对第二次的低频分解产生三个高频一个低频。三层分解后产生一个低频9个高频,并产生对应的小波系数
    2020-05-31下载
    积分:1
  • opnet中进行TDMA仿真
    在opnet中进行了完整的固定时隙分配全过程仿真,适合做mac仿真的做参考
    2020-12-07下载
    积分:1
  • STM32寄存器手册
    STM32寄存器手册: STM32F101xx、STM32F102xx、STM32F103xx、STM32F105xx和STM32F107xx——先进的基于ARM核心的32位微控制器 .pdf目录STM32F10XXX参考于册5.3BKP功能描述3853.1侵入检测38532RTC校准3954BKP寄存器描述39541备份数据寄存器X( BKP DRX)(X=1…10)39542RTC时钟校准寄存器( BKP RTCCR)39543备份控制寄存器( BKP CR40544备份控制/状态寄存器( KP CSR40545BKP寄存器映像426复位和时钟控制(RCC)4561复位456.1.1系统复位4561.2电源复位4561.3备份域复位4662时钟4662.1HSE时钟4862.2HS时钟4862.3PLL496.24LSE时钟49625LS|时钟49626系统时钟( SYSCLK)选择50627时钟安全系统(CSS)50628RTC时钟5062.9看门狗时钟5062.10时钟输出506.3RCC寄存器描述631时钟控制寄存器(RCC_CR)632时钟配置寄存器(RCC_CFGR)52633时钟中断寄存器(RCC_CR)634APB2外设复位寄存器( RCC APB2RSTR46635APB1外设复位寄存器(RcC_APB1RSTR58636AHB外设时钟使能寄存器( RCC AHBENR)637APB2外设时钟使能寄存器( RCC APB2ENR)66638APB1外设时钟使能寄存器( RCC APB1ENR62639备份域控制寄存器( RCC BDCR)656310控制/状态寄存器( RCC CSR)666311RCC寄存器地址映像687通用和复用功能O(GPO和AF|O)6971GPO功能揹述6971.1通用O(GP|O)70712单独的位设置或位清除71713外部中断/唤醒线717.14复用功能(AF)717.1.5软件重新映射l/O复用功能717.1.6GP|O锁定机制7171.7输入配置717.1.8输出配置727.1.9复用功能配置737.1.10模拟输入配置733/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册7.2GPO寄存器描述757.2.1端口配置低寄存器(GP| OX CRL)(X=A.E)757.22端口配置高寄存器( GPIOX CRH)(X=A.E757.2.3端凵输入数据寄存器(GP|Ox|DR)(X=A.E)76724端口输出数据寄存器(GP|Ox_ODR)(x=A.E767.2.5端口位设胃/清除寄存器(GP|OⅹBSRR)(x=A.E777.26端冂位清除奇仔器( GPIOX BRR)(x=A.E)777.27端口配置锁定寄存器(GPOx_LCKR)(x=AE)777.3复用功能O和调试配置(AF|O)7873.1把OSC32NOSC320UT作为GPO端口PC14/PC1578732把OSC| NOSC OUT引作为GPO端凵 PDO/PD17873.3CAN复用功能重映射79734JTAG/SWD复用功能重映射797.3.5ADC复用功能重映射807.36定时器复用功能重映射807.3.7 USART复用功能重映射738P2C1复用功能重映射827.3.9SPl1复用功能重映射8274AF|O寄存器描述837.4.1事件控制寄存器( AFIO EVCR837.42复用重映射和调试MO配置奇存器( AFIO MAPR)83743外部中断配置寄存器1(AF| O EXTICR1)86744外韶中断配置寄存器2( AFIO EXTICR2)867.45外部中断配置寄存器3(AFO_ EXTICR3)87746外部中断配置寄存器4(AF| O EXTICR4)877.5GP|O和AF|Q寄存器地址映象888中断和事件898.1套向量中断控制器898.1.1系统嘀嗒( SysTick)校准值寄存器89812中断和异常向量8982外部中断/事件控制器(EXT)8.2.1主要特性91822框图928.23唤醒事件管理92824功能说明9282.5外部中断/事件线路映像948.3EXT寄存器描述95831中断屏蔽奇存器( EXTI IMR)95832事作屏蔽寄存器( EXTI EMR)95833上升沿触发选择寄存器( EXTI RTSR)968.34降沿蝕发选择寄存器( EXTI FTSR)96835软件中断事件寄存器( EXTI SWIER)97836挂起寄存器( EXTI PR)978.37外部中断/事件寄存器映像9DMA控制器(DMA999.1DMA简介9992DMA主要特性999.3功能描述1004/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册9.3.1DMA处理100932仲裁器10093.3DMA通道101934可编程的数据传输宽度,对齐方式和数据大小端102935错误管理103936中断03937DMA请求映像0494DMA寄存器107941DMA中断状态寄存器 DMA SR107942DMA中断标志清除寄存器 DMA FCR)108943DMA通道x配置寄存器( DMA CCRX)(x=1.7)108944DMA通道x传输数量寄存器( DMA CNDTRX)(x=1.7110945DMA通道x外设地址寄存器 DMA CPARX)(x=1.711094.6DMA通道x存储器地址寄存器 DMA CPARX)(X=1.7)110947DMA寄存器映像11110模拟/数字转换(ADC)11310.1ADC介绍11310.2ADC主要特征11310.3ADC功能描述11410.3.1ADC开关控制1151032ADC时钟11510.3.3通道选择10.34单次转换模式11510.35连续转换模式11610.3.6时序图10.3.7模拟看门狗11610.3.8扫描模式11710.39注入通道管理11710.3.10间断模式104校准11910.5数据对齐119106可编程的通道采样时间12010.7外部触发转换120108DMA请求121109双ADC模式12110.91同步注入模式12210.92同步规则模式12310.93快速交替模式12310.94慢速交替模式12410.9.5交替触发模式12410.9.6独立模式12510.9.7混合的规则注入同步模式12510.98混合的同步规则+交替触发模式125109.9混合同步注入+交替模式12610.10温度传感器1261011ADC中断2710.12ADC寄存器描述2810.121ADC状态寄存器(ADc_SR)1285/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册10.122ADC控制寄存器1(ADC_CR1)12910.123ADC控制寄存器2(ADC_CR213110.124ADC采样时间寄存器1(ADC_SMPR1)13310.125ADC采样时问寄存器2(ADC_SMPR2)13310.12.6ADC注入通道数据偏移寄存器X(ADC_ JOFRX)(X=1.4)13410.127ADC看门狗高阀值寄存器(ADC_HTR13410.128ADC看门狗低阀值寄存器( ADC LRT)13410.129ADC规则序列寄存器1( ADC SQR1)13510.12.10ADC规则序列寄存器2(ADC_SQR2)13510.1211ADC规则序列寄存器3( ADC SQR3)13610.1212ADC注入序列寄存器(ADC_JsQR13610.1213ADC注入数据寄存器ⅹ( ADC JDRX)(x=1.4)13710.1214ADC规则数据寄存器(ADC_DR)13710.1215ADC寄存器地址映像13811数字/模拟转换(DAC)14011.1DAC简介140112DAC主要特征11.3DAC功能描述4111.3.1使能DAC通道14111.32使能DAC输出缓存1411133DAC数据格式4211.34DAC转换142113.5DAC输出电压14311.3.6选择DAC触发14311.3.7DMA请求14411.3.8噪声生成1441139角波生成14514双DAC通道转换14511.4.1无波形生成的独立触发145114.2带相同LFSR生成的独立触发146114.3带不同LFSR生成的独立触发1461144带相同三角波牛成的独立触发146114.5带不同三角波生成的独立触发1461146同时软件启动147114.7不带波形生成的同时触发14711.4.8带相可LFSR生成的同时触发1471149带不同LFSR生成的同吋铀发147114.10带相同三角波生成的同时触发147114.11带不同三角波生成的同时触发148115DAC寄存器1491151DAC控制寄存器DAC_CR)1491152DAC软什触发寄存器 DAC SWTRIGR)1511153DAC通道1的12位右对齐数据保持寄存器(DAC_DHR12R1)1521154DAC通道1的12位左对齐数据保持寄存器 DAC DHR12L1)1521155DAC通道1的8位石对齐数据保持寄存器DAC_DHR8R1)1521156DAC通道2的12位右对齐数据保持寄存器DAC_DHR12R21531157DAC通道2的12位左对齐数据保持寄存器DAC_DHR12L2)1531158DAC通道2的8位右对齐数据保持寄存器( DAC DHR8R2)1531159双DAC的12位右对齐数据保持寄存器DAC_DHR12RD15411510双DAc的12位左对齐数据保持寄存器DAC_DHR12LD)1546/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册11511双DAC的8位对齐数据保持寄存器(DAC_DHR8RD)15411512DAC通道1数据输出寄存器( DAC DOR1)15511513DAC通道2数据输出寄存器(DAC_DOR2)15511.514DAC寄存器映像2高级控制定时器(TM和TM8)157121TM1和TM8简介57122TM1和TM8主要特性15712.3TM1和TM8功能描述15812.3.1时基单元1581232计数器模式1601233重复计数器16712.3.4时钟选择1681235捕荻/比较通道17112.3.6输入捕获模式17312.37PWM输入模式174123.8强置输出模式17412.39输出比较模式175123.10PWM模式12.3.11互补输出和死区插入178123.12使用刹车功能179123.13在外部事件时清除 OCXREF信号180123.14产生六步PWM输出181123.15单脉冲模式182123.16编码器接口模式18312.3.17定时器输入异或功能185123.18与霍尔传感器的接口85123.19TMx定时器和外部触发的同步18712320定时器同步19012.3.21调试模式190124TM1和TM8奇存器描述191124.1控制寄存器1( TIMX CR1)1911242挖制寄存器2( TIMX CRI2)192124.3从模式控制寄存器(TMx_SMCR931244DMA中断使能寄仔器( TIMX DIER)951245状态寄存器(TMSR)124.6事件产生寄存器( TIMX EGR)19712.4.7捕获比较模式寄仔器1( TIMX CCMR1)1981248捕获/比较模式寄存器2( TIMX CCMR2)200124.9捕获/比较使能寄存器( TIMX CCER)202124.10计数器( TIMX CNT)203124.11预分频器( TIMX PSO212412自动重装载寄存器( TIMX ARR)20412413重复计数寄存器( TIMX RCR)20412414捕狄/比较寄存器1( TIMX CCR1)205124.15捕获/比较寄存器2( TIMX CCR220512.4.16捕获/比较寄存器3( TIMX CCR3)20512417捕/比较寄存器( TIMX CCR4)20612418刹车和死区寄存器( TIMX BDTR206124.19DMA控制寄存器(TMX_DCR)20812420连续模式的DMA地址( TIMX DMAR)2087/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册12421TM1和TM8寄存器图13通用定时器(TMX)211131TMx简介211132TMx⊥要功能21113.3TMx功能措述21213.3.1时基单元212133.2计数器模式21313.3.3时钟选择22113.3.4捕获/比较通道223133.5输入捕获模式22513.36PWM输入模式22513.3.7强置输出模式22613.3.8输出比较模式2261339PWM模式227133.10单脉冲模式22913.3.11在外部事件时清除 OCXREF信号231133.12编码器接凵模式231133.13定时器输入异或功能233133.14定时器和外部触发的同步23313.3.15定时器同步235133.16调试模式239134TMx寄存器描述2401341控制寄存器1( TIMX CR1)2401342控制寄存器2( TIMX CR2)241134.3从模式控制寄存器(TMX_SMcR2421344DMA中断使能寄存器( TIMX DIER)2431345状态奇存器( TIMX SR)244134.6事件产生寄存器( TIMX EGR)24513.47捕获/比较模式寄存器1(TMx_cCMR1)2461348捕获/比较模式寄仔器2( TIMX CCMR2)2491349捕获/比较使能寄存器( TIMX CCER251134.10计数器( TIMX CNT252134.11分频器( TIMX PSO25213412自动重装载寄存器( TIMX ARR)25213413捕获/比较寄存器1 TIMX CCR1252134.14捕获/比较寄存器2( TIMX CCR2)25313415捕获/比较寄存器3( TIMX CCR3253134.16捕获/比较寄存器4( TIMX CCR4)253134.17DMA控制寄存器( TIMX DCR)25413.418连续模式的DMA地址( TIMX DMAR)254134.19TMx寄存器图25514基木定时器(TM6和TM7)257141TM6和TM7简介257142TM6和TM7的主要特性257143TM6和TM7的功能25814.3.1时基单元2581432计数模式2591433时钟源26114.34调试模式2628/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册144TM6和TM7寄存器262144.1控制寄存器1( TIMX CR1)2621442控制寄存器2(TM×CR2)2631443DMA中断使能寄存器(TMxD|ER)2631444状态寄存器( TIMX SE)2641445事件产生寄存器( TIMX EGR)2641446计数器( TIMX CNT2641447预分频器( TIMX PSC)2651448自动重装载寄存器( TIMX ARR)2651449TM6和TIM7寄存器图26615实时时钟(RTC)26715.1RTC简介267152主要特性267153功能描述267153.1概述2671532复位过程2681533读RTC寄存器26815.3.4配置RTC寄存器269153.5RTC标志的设置269154RTC寄存器描述2701541RTC控制寄存器高位(RTC_CRH)2701542RTC控制寄存器低位(RTc_CRL2701543RTC预分频装载寄存器(RTC_ PRLHIRTC PRLL2711544RTC预分频器余数寄存器( RTC DIVH/ RIC DIVL)2721545RTC计数器寄存器(RTC_CNTH/ RTC CNTL)2721546RTC制钟寄存器( RTC ALRH/ RTC ALRL)273154.7RTC寄存器映像2756独立看门狗(WDG)27616.1简介276162WDG主要性能27616.3WDG功能描述276163.1硬件看门狗27616.32寄存器访问保护27616.3.3调试模式276164WDG寄存器描述2771641键寄存器( WDG KR)2771642预分频奇器( WDG PR)2781643重装载寄存器( WDG RLR2781644状态寄存器(WDG_SR)279164.5WDG奇存器映像2797窗口看门狗(WWDG)28017.1WWDG简介28017.2WwDG主要特性28017.3WWDG功能描述28017.4如何编写看门狗超时程序28117.5调试模式28217.6寄存器描述2829/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本目录STM32F10XXX参考于册1761控制寄存器( WWDG CR)2821762配置寄存器WWDG_CFR)2831763状态寄存器WWDG_SR)28317.64WWDG寄存器映像2848灵活的静念存储器控制器(FSMC28518.1FSMC功能描述285182框图28518.3AHB接口2868.3.1支持的存储尜和操作286184外部设各地址映像287184.1NOR和 PSRAM地址映像2881842NAND和PC卡地址映像28818.5NOR闪存和 PSRAM控制器289185.1外部存储器接凵信号290185.2支持的存储器及其操作2911853时序规则2911854NOR肉存和 PSRAM时序图2911855同步的成组读30418.56NOR闪存和 PSRAM控制器寄存器308186NAND闪存和PC卡控制器86.1外部存储器接凵信号3131862NAND闪存/PC卡支持的存储器及其操作3141863NAND闪存、ATA和PC卡时序图3141864NAND闪存操作1865NAND闪存预等待功能18.6.6NAND闪存的纠错码ECC计算(NAND闪存)31718.6.7NAND內存和PC卡控制器寄存器317187FSMC寄存器地址映象32419SDO接口(SD|O)325191SDO主要功能325192SD|O总线拓扑32519.3SDO功能描述28193.1sDO适配器3291932SD|OAHB接∏336194卡功能描述194.1卡识别模式3361942卡复位336943操作电压范围确认3371944卡识别过程337194.5写数据块3381946读数据块33819.47数据流操作,数据流写入和数据流读岀(只适用于多媒体卡)338194.8擦除:成组擦除和扇区擦除33919.4.9宽总线选择和解除选择340194.10保护管理340194.11卡状态寄存器342194.12SD状态寄存器344194.13SDMO模式3470/524参照2008年12月RM0008 Reference Manua|英文第7版本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
    2020-12-10下载
    积分:1
  • c++笔试面试之网络和多线
    该文档是我总结的c++笔试面试通常会问的一些问题。另外可以从我的资源目录下找c++数据结构与算法,c++笔试面试基础两部分材料,综合这三个材料一起看,我相信大家一定尽快找到工作。ClientServerFIN WAIT 1IFIN MCLOSE WAITack M+1FIN WAIT 2LAST ACKFIN NTIME WAITACK=1 ack=K+CLOSEDm由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送个FIN来终止这·方向的连接,收到个FIN只是意味着这方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此第一次挥于Client发送个HN,用来关闭 Client到 Server的数据传送, Client进入 FIN WA1状第二次挥手Server收到FIN后,发送一个ACK给 Clien,确认序号为收到序号+1(与SN相同,一个FIN占用一个序号), Server进入 CLOSE WAIT状态。第三次挥手Server发送一个FIN,用来关闭 Server到 Client的数据传送, Server进入 LAST ACK状态。第四次挥手Client收到FIN后, Client进入 TIME WAIT状态,接着发送一个ACK给 Server,确认序号为收到序号+1, Server进入CL0SED状态,完成四次挥手。5.tcp为什么建立连接是三次握手,而关闭连接却是四次挥手呢?当主杋A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FN给主机B;主机B收到A发送的F⊥N,表示收到了,就会发送ACK回复;但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FⅣN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A:;A收到B发米的FIN,知道B的数据也发送完∫,回复ACK,A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。6.TCP头大小,包含字段?TCP协议头最少20个字节,包括TCP的源端口,目的端口,序列号,应答号等等。7.tcp与udp的区别?为什么TCP要叫做数据流?1).基于连接与无连接2).对系统资源的要求(TCP较多,UDP少)3).UDP程序结构较简单4).流模式与数据报模式5).TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证6).TCP有拥塞控和流量控制,UDP没有TCP提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丟弃重复数据,检验数据,沇量控制等功能,保证数据能从端传到另·端UDP是一个简单的面向数据报的运输层协议。∪DP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。山于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快8使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而udp无法保证?因为TCP发送的数据包是按序号发送,有确认机制和丢失重传机制,而udp是不可靠的发送机制,发送的对应端口的数据包不是按顺序发送的。9tcp三次握手的, accept发生在三次握手哪个阶段?三次握手:C--->SYNK>ACK K+1 SYN JC->ACK]+1DONELclient的 connect引起3次握于server在 socket,bind, listen后,阻塞在 accept,三次握手完成后, accept返回一个fd,TCP服务器端sackettTC客户端bindosten)connecto建立连接阻寒直到有客户端连接请求数据writereadr处理请求回应数据readr结束连接readr yclose10.流量控制和拥塞控制的实现机制数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失。流量控制是一种解决发送端与接收方吞吐量不匹配问题的机制。网络拥瘧现象是指到达通信了网中杲部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个冈络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机。11.滑动窗口的实现机制滑动窗凵机制是tcp流量控制的一种机制。滑动窗口分为发送窗凵和接收窗口,发送窗口会根据接受窗口返回的ack中的大小来确定发送数据多少,如果ack返回可接受为零时,发送窗口不发送数据,然后启动定时器,一定时间内给接收端发送探测报文。为了传递效率提扃,发送数据吋会尽量次发送多个字节,这里会通过算法控制接收窗口发送窗口接收窗口取决发送窗口取决于对于本段应用端接收窗囗应用应用接收窗口取决发送窗口取决于对于本段应用端接收舍口发送窗口接收窗口字节流方向窗囗关联方问发送窗口中的四个概念:已发送并收到确认;凵发送但未收到确认;允许发送但未发送;不允许发送。每次成功发送完数据后,发送窗口都会根据接受窗口返冋的ack大小来调整窗口大小后浩前沿前移收缩前移A的发送窗凵=20E区图国时国时网國國回回区画乎图已发送井不允许发送收到确认允许发送的序号B期望收到的序号图5-15根据B给出的窗口值,A构造出自己的发送窗口12. linux的五种I0模式/异步模式1)同步阻塞I/O2)同步非阻塞I/O(只能阻塞个io)3)同步I/O复用模型(可以阻塞多个i,用一个进程/线程调用多个io,其实是复用进稈/线程)4)同步信号驱动I/O5)异步I/O模型3.网络编程设计模式, reactor/ proactor/半同步半异步模式?reactor模式:同步阻塞I/O模式,注册对应读写事件处理器,等待事件发生进而调用事件处理器处理事件。 proactor模式:异步I/O模式。 Reactor和 Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的, Reactor中需要应用程序自己读取或者写入数据, Proactor模式中,应用程序不需要进行实际读写过程。Reactor是:主线程往epo‖l核上注册 socket读事件,上线程调用 epoll_wait等待 socket上有数据可读,当 socket上有数据可读的时候,主线程把 socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒,处理客户请求,然后往epo‖!内核上注册 socket写请求事件。主线程调用 epoll_wait等待写请求事件,当有事件可写的时候,主线程把 socket可写事件放入请求队刎。睡眠在请求队列上的工作线程被唤醒,处理客户请求。Proactor主线程调用 aio read函数向内核注册 socket上的读完成事件,并告诉内核用广读缓冲区的位置,以及读完成后如何通知应用程序,主线程继续处理其他逻辑,当 socket上的数据被读入用户缓冲区后,通过信号告知应用程序数据已经可以使用。应用程序预先定义好的信号处理凼数选择一个工作线程来处理客户请求。工作线程处理完客户请求之后调用ao wrⅰte函数向内核注册 socke写完成事件,并告诉内核写缓冲区的位置,以及写完成时如何通知应用程序。主线程处玛其他逻辑。当用户缓存区的数据被写入 socket之后内核向应用程序发送一个信号,以通知应用程序数据已经发送完毕。应用程序预先定义的数据处理函数就会完成工作。半同步半异步模式上:层的任务(如:数据库查询,文件传输)使用同步IO模型,简化了编写并行程序的难度而底层的任务(如网络控制器的中断处理)使用异步I/O模型,提供了执行效率14.1inux下io多路复用的方案 select、poll、epol1的区别select:利用一个数组结构(最大1024)来存储需要检测的描述符,每次调用需要清空数组结构后重新存入新的描述符文件,然后遍历需要操作的描述符。可以用仨检测单个描述符可以理解为拉取pol:也是利用数组结构存储,但是没有描述符个数限制,而且每次调用时不需要清空存储描述符结构数组。可以用于检测大量描述符的情况。可以理解为拉取epoll:是 select/po!的升级版本,它的机制是可以监视大量的描述符,当有需要连接时将改描述符存放到队列中,而epol只监视和执行队列中即可。可以用于大量并发连接中只有少量活跃的情况。可以理解为推送http://blog.csdnnet/lookatthestars/article/details/5210877315.epo11哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认epo‖有EPoL和 EPOLLET两种触发模式,LT是默认的模式,ET是高速"模式。LT模式下,只要这个fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户稈序去操作,而在ET(边缘触发)模式中,它只会提示一次,直到下次再有数据流入之前都不会再提小」,无论fd中是否还有数据可读。所以在ET模式下,read一个fd的时候一定要把它的 buffer读光,也就是说一直读到read的返回值小于请求值。也就是说在LT模式的情况下‘定要确认收发的数据包的 buffer是不是足够大如果收发数据包大小大于 buffer的大小的时侯就可能会出现数据丢失的情况。16. Boost.asio、 libevent、1ibev简介。Boost.asio是一个跨平台的C++库,用于网络和底层I/0编程,可以在I/0对象(如socket)上执行同步和异步操作。 boost.asio的跨平台性原理是在win系统(支持I0CP)linux系统(支持epo11)。 boost:asio将整个异步平台抽象成 boost::asio: lo service,用work控制 1o service生命周期,通知它是否结束,只要对象work( 1o servi ce)存在,10 service就不会结束。利用 buffer类存储数据libevent是一个C语言与的网络库,官方主要支持的是类 linux操作系统,最新的版本添加了对 windows的I0CP的支持由于I0CP是异步I0,与 linux下的POL模型, EPOLL型,还有 freebsd的 KQUEUE等这些同步模型在用法上完全不一致,所以使用方法也不样,就好比ACE中的 Reactor和 Proactor模式一样,使用起来需要转变思路。如果对性能没有特别的要求,那么使用 Libevent中的 select模型来实现跨平台的操作, select模型可以橫跨 windows, linux,unix, solaris等系统。libel是一个C语言写的,只支持1inux系统的库,我以前研究的时候只封装了EPOL模型,不知道现在的新版有没有改进。使用方法类似 libevent,但是非常简洁,代码量是最少的一个库,乜貮几千行代码。显然这样的代码跨平台肯定是无法支持的了,如果你只需要在1inux下面运行,那用这个库也是可以的。17. connect可能会长时间阻塞,怎么解决?1.使用定时器;(最常用也最有效的·种方法2.采用非阻塞模式:设置非阻塞,返回之后用 select检测状态18. keepalive是什么东西?如何使用?keepalive,是在TCP中一个可以检测死连接的机制。1).如果主机可达,对方就会响应ACK应答,就认为是存活的。2).如果可达,但应用程序退岀,对方烑发RST应答,发送TCP撤消连接。3).如果可达,但应用程序崩溃,对方就发FIN消息。4).如果对方主杋不响应ack,rst,继续发送直到超时,就撤消连接。默认二个小时。19. socket什么情况下可读?1. socket接收缓冲区中己经接收的数据的字节数大于等于 socket接收缓冲区低潮限度的当前值;对这样的 socket的读操作不会阻塞,并返回一个大于0的值(准备好读入的数据的字节数)2连接的读一半关闭(即:接收到对方发过来的FIN的TCP连接)并且返回03.s0cket收到了对方的 connect请求已经完成的连接数为非0这样的 socket处于可读状态;4.异常的情况下 socket的读操作将不会阻塞,并且返同一个错误(-1)。20. socket编程,如果 client断电了,服务器如何快速知道?使用定时器(适合有数据流动的情况);使用sock吐t选项SO_ KEEPALIVE(适合没有数据流动的情况);1)、自己编写心跳包程序,简单的说就是自己的程序加入一条线程,定时向对端发送数据包,看是否有ACK,根据ACK的返回情况来管理连接。此方法比较通用,般使用业务层心跳处理,灵活可控,但改变了现有的协议2)、使用TCP的 keepalive机制,∪NX网络编程不推荐使用SO_ KEEPALIVE米做心跳检测。keepalive原理:TCP内嵌有心跳包,以服务端为例,当 serve检测到超过一定时间(/proc/sys/net/ipv4/tcp_ keepalive_ time7200即2小时)没有数据传输,那么会向client端发送一个 keepalive packet21.如果 select返回可读,结果只读到0字节,什么情况?某个套接字集合中没有准备好,可能会 select内存用 FD CLR清为0.22.网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道?若客户端掉线或者重新启动,服务器端会收到复位信号,每一种tcp/ip得实现不一样,控制机制也不·样。23.TTL是什么?有什么用处,通常那些工具会用到它?ping? traceroute? ifconfig?netstat?TTL是 Time to live,每经过一个路由就会被减去一,如果它变成0,包会被丢掉。它的主要目的是防止包在有回路的网络上死转,浪费网络资源。ping和 traceroute用到它。24请说出http协议的优缺点1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务吋,只需传送请求方法和路径,通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断廾连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,导致每次连接传送的数据量增大。缺点就是不够安全,可以使用hps完成使用25大规模连接上来,并发模型怎么设计Epol1+线程池(epo11可以采用 libevent处理)26.tcp怎么做到不丢包。TCP提供超时重发(每一个seq后都有ack,计时时间到后重发seq),丢重复数据(通过判断seq和ack的大小,如果seq比ack小说明发过了),检验数据(通过tcp的伪首部),流量控制(利用滑动窗口实伣流量控制)等功能,保证数据能从一端传到另一端。27.TCP的确认重发机制A发—B/a向b发送数据B确认-A//b收到数据后发送给a确认包A-在重发数据中将发送成功的数据删掉28.I0CP和epo1l的联系与区别?联系:两者都是高效的io模型,都是基于事件驱动。区别:TOCP用在 Windows上,epo11用在1inux上;IQCP本质是异步非阻塞的,而epo1l是同步非阻塞的;1OCP是当事件完成时再通知,而 epoll是当事件满足处理要求是通知处理。boost中的asio网络模块的跨平台性原理是在win系统(支持IOCP),1inuκ系统(支持epollhttps://yg.aliyun.com/articles/53621进程与线程1.进程之间的通信无名管道:单向通信,只能亲戚关系才能传递,般用在父了进程之间有名管道:单向通信,可以用在任意两个进程之间通信。信号量:是一种计数器,主要用于资源共亨,用在多个进程或者进程内多个线程之间同步手段共享内存:一个进程创建共多个进程使用,和信号一起使用在进程同步与通信。信号:比较复朵的·种通信。套接字:消息队列:客服信号传递信息少,管道缓冲区受限。2.线程同步临界区,互斥对象,事件,信号量3.多线程和多进程的区别1)进程数据是分丌的:共享复岽,需要用IPC,同步简单;多线程共享进程数据:共享简单,同步复杂2)进程创建销毁、切换复杂,速度慢:线程创建销毁、切换简单,速度快3)进程占用内存多,CPU利用率低;线程占用内存少,CPU利用率高4)进程编程简单,调试简单;线程编程复杂,调试复杂5)进程间不会相互影响;线程个线程挂掉将导致整个进程挂抻6)进程适应于多核、多机分布;线程适用于多核线程所私有的:线程jd、寄存器的值、栈、线程的优先级和调度策略、线程的私有数据、信号屏蔽字、ero变量。4.多线程锁的种类有哪些?a.互斥锁( mutex)b.递归锁C.自旋锁d.读写锁5.自旋锁和互斥锁的区别?白旋锁中当锁被其他线程占用时,其他线程并不是睡眠状态,而是不停的消耗CPU,获取锁;互斥锁则不然,保持睡眠,直到互斥锁被释放溦活。自旋锁,递归调用容易造成死锁,对长时间才能获得到锁的情况,使用自旋锁容易造成CPU效率低,只有内核可抢占式或SMP情况下才真正需要自旋锁6.多线程程序架构,线程数量应该如何设置?应尽量和CPU核数相等或者为CPU核数+1的个数7.有一个计数器,多个线程都需要更新,会遇到什么问题,原因是什么,应该如何做?如何优化?有可能一个线程更新的数据已经被另外一个线程更新了,更新的数据就会出现异常,可以加锁,保证数据史新只会被一个线程完成
    2020-11-27下载
    积分:1
  • 696516资源总数
  • 106913会员总数
  • 8今日下载