当前位置:  编程技术>移动开发
本页文章导读:
    ▪稿件1:libcurl中发错重传机制        文章1:libcurl中发错重传机制转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8159351 0.序 1.libcurl与发错重传相关的内容    1)命令行    2)程序中没有专门进行发错重传的参数或函.........
    ▪ UIControl 施用全面解析        UIControl 使用全面解析 前面写过UILable 使用全面解析 UIButton 使用全面解析 UITextField 使用全面解析 它们有共同父类UIControl,对UIControl的理解 有助全面理解iOS中的控件。 UIKit提供了一组控.........
    ▪ libjingle源码分析之4:Session和Transport       libjingle源码分析之四:Session和Transport 摘要         本文介绍了Session和Transport模块。 概述         Session、SessionClient、Transport和TransportChannel的关系如下图所示: 模块解析 SessionClient.........

[1]稿件1:libcurl中发错重传机制
    来源: 互联网  发布时间: 2014-02-18
文章1:libcurl中发错重传机制

转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8159351

0.序
1.libcurl与发错重传相关的内容
   1)命令行
   2)程序中没有专门进行发错重传的参数或函数
2.libcurl如何实现发错重传
3.总结

0.序

     本文目的:实现libcurl的发错重传机制
1.libcurl与发错重传相关的内容
     1)命令行选项 --retry<num>、 --retry-delay<seconds>和--retry-max-time<seconds>
               当传输过程中出现错误,如超时、FTP 5xxx返回码或者HTTP 5xx返回码,curl会按照设置进行重传,这几个选项都与重传有关。
               --retry <num>设置重试次数,--retry-delay <seconds>设置两次重试的间隔时间,--retry-max-time <seconds>设置两次重试间隔的最长时间。
               默认情况下,curl不进行重试;如果重试,第一次间隔1秒,之后每次都间隔上一次的2倍时 间,直到间隔时间达到10分钟,之后的重试都将采用10分钟间隔。如果这3个选项的值被重新设置,则执行设置值。
     2)程序中没有专门进行发错重传的参数或者函数。
               为什么如此说呢?通过libcurl的代码,我们可以清晰的发现这点。
               首先,明确一点:config->req_retry是代指剩余的重试次数。
               <1>在tool_getparam.c中的getparameter函数中,
               <2>在tool_operate.c中
                    
                <3>在tool_operate.c中,retry_numretries作为剩余的重试次数

          
               综上<1-3>所述,如果想要使用重传,就要给req_retry赋值。那么如何给req_retry赋值呢?稍后再论。因为config->req_retry首次出现是在getparameter函数中,那么我们来看看这个函数是做什么用的。
                 经过查证,getparameter函数作用:解析命令行参数,getparameter所做的事情就是根据命令行参数的设置,修改config数据结构,以此影响和调整curl的功能。
                  至此,我们发现,libcurl中出现的有关重传的内容,实际上就是为了执行命令行中--retry --retry-delay和retry-max-time的。
                    因此我们可以得出结论,程序中没有专门进行发错重传的参数或者函数。
2.libcurl如何实现发错重传呢?
          难道libcurl不能进行发错重传????
          这个观点我自己都很难相信!
          我突然记起之前一篇文章中谈到curl_easy_perform的返回值。于是乎有所发现,curl_easy_perform正确时返回CURLE_OK,错误时会返回不同状态值。那么我们就可以利用其返回的不同状态值进行发错重传。
          如果只想对超时、FTP 5xxx返回码或者HTTP 5xx返回码这几种情况,进行发错重传,那么就可以在出现这几种状态值时,才重新进行curl_easy_perform的执行。我所采用的方法很简单,就是只要出错,我就进行重传。
          思路如下:当curl_easy_perform不能成功执行就执行for循环,不断执行curl_easy_perform,直到成功。如果成功,则退出for循环,继续执行。注:其实不能无限循环,因为一旦无限循环极有可能造成程序崩溃,因为有时候的确是不能发送成功。
          我的部分代码如下所示:只是在curl_easy_perform处增加for循环,其他代码未曾修改。

     
3.总结:
     尽管多数时候,只是使用libcurl的函数来实现相关功能,但大家不能忘记libcurl也是开源代码,因此当实在找不到解决方法时,不妨简单的从源码进行分析,说不定就能找到不错的思路
          

文章参考:
http://hi.baidu.com/wkhaxwbkznbnpsq/item/5a6dba8d6b20182c100ef384
  http://blog.csdn.net/kevin_zqw/article/details/6927227

    
[2] UIControl 施用全面解析
    来源: 互联网  发布时间: 2014-02-18
UIControl 使用全面解析

前面写过UILable 使用全面解析 UIButton 使用全面解析 UITextField 使用全面解析 它们有共同父类UIControl,对UIControl的理解

有助全面理解iOS中的控件。

UIKit提供了一组控件:UISwitch开关、UIButton按钮、UISegmentedControl分段控件、UISlider滑块、UITextField文本字段控件、UIPageControl分页控件。

控件是对UIView派生类的实用增强及补充,并可以直接附着于导航栏、表格单元,甚至更大的对象。

这些控件的基类均是UIControl,而UIControl派生自UIView类,所以每个控件都有很多视图的特性,包括附着于其他视图的能力。所有控件都拥有一套共同的属性和方法。

所以学习控件,我们先学习UIControl。

 

属性

 

enabled

控件默认是启用的。要禁用控件,可以将enabled属性设置为NO,这将导致控件忽略任何触摸事件。被禁用后,控件还可以用不同的方式显示自己,比如变成灰色不可用。虽然是由控件的子类完成的,这个属性却存在于UIControl中。

 

selected

当用户选中控件时,UIControl类会将其selected属性设置为YES。子类有时使用这个属性来让控件选择自身,或者来表现不同的行为方式。

 

contentVerticalAlignment

控件如何在垂直方向上布置自身的内容。默认是将内容顶端对其,对于文本字段,可能会改成UIControlContentVerticalAlignmentCenter。对于这个字段,可以使用下列诸值:

 

1.UIControlContentVerticalAlignmentCenter  

2.UIControlContentVerticalAlignmentTop  

3.UIControlContentVerticalAlignmentBottom  

4.UIControlContentVerticalAlignmentFill

 

contentHorizontalAlignment

水平方向

 

1.UIControlContentHorizontalAlignmentCenter  

2.UIControlContentHorizontalAlignmentTop  

3.UIControlContentHorizontalAlignmentBottom  

4.UIControlContentHorizontalAlignmentFill  

 

 

事件通知

UIControl类提供了一个标准机制,来进行事件登记和接收。这令你可以指定你的控件在发生特定事件时,通知代理类的一个方法。如果要注册一个事件,可以使用addTarget方法:

 

[ myControl addTarget: myDelegate   action:@selector(myActionmethod:)  forControlEvents:UIControlEventValueChanged ];

 

事件可以用逻辑OR合并在一起,因此可以再一次单独的addTarget调用中指定多个事件。下列事件为基类UIControl所支持,除非另有说明,也适用于所有控件。

 

 

 

UIControlEventTouchDown

单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。

 

UIControlEventTouchDownRepeat

多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。

 

UIControlEventTouchDragInside

当一次触摸在控件窗口内拖动时。

 

UIControlEventTouchDragOutside

当一次触摸在控件窗口之外拖动时。

 

UIControlEventTouchDragEnter

当一次触摸从控件窗口之外拖动到内部时。

 

UIControlEventTouchDragExit

当一次触摸从控件窗口内部拖动到外部时。

 

UIControlEventTouchUpInside

所有在控件之内触摸抬起事件。

 

UIControlEventTouchUpOutside

所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。

 

UIControlEventTouchCancel

所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。

 

UIControlEventTouchChanged

当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。

 

UIControlEventEditingDidBegin

当文本控件中开始编辑时发送通知。

 

UIControlEventEditingChanged

当文本控件中的文本被改变时发送通知。

 

UIControlEventEditingDidEnd

当文本控件中编辑结束时发送通知。

 

UIControlEventEditingDidOnExit

当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。

 

UIControlEventAlltouchEvents

通知所有触摸事件。

 

UIControlEventAllEditingEvents

通知所有关于文本编辑的事件。

 

UIControlEventAllEvents

通知所有事件。

 

除了默认事件以外,自定义控件类还可以用0x0F000000到0x0FFFFFFF之间的值,来定义他们自己的时间。

要删除一个或多个事件的相应动作,可以使用UIControl类的removeTarget方法。使用nil值就可以将给定事件目标的所有动作删除:

 

 

 

[ myControl removeTarget:myDelegate   action:nil  forControlEvents:UIControlEventAllEvents];  

 

要取得关于一个控件所有指定动作的列表,可以使用allTargets方法。这个方法返回一个NSSet,其中包含事件的完整列表:

 

NSSet* myActions = [myConreol allTargets ];  

 

另外,你还可以用actionsForTarget方法,来获取针对某一特定事件目标的全部动作列表:

 

 

NSArray* myActions = [ myControl actionForTarget:UIControlEventValueChanged ];  

 

如果设计了一个自定义控件类,可以使用sendActionsForControlEvent方法,为基本的UIControl事件或自己的自定义事件发送通知。例如,如果你的控件值正在发生变化,就可以发送相应通知,通过控件的代码可以指定时间目标,这个通知将被传播到这些指定的目标。例:

 

 

 

[ self sendActionsForControlEvents:UIControlEventValueChanged ]; 

 

当委托类得到事件通知时,他将收到一个指向事件发送者的指针。下面的例子用于处理分段控件的事件,你的动作方法(action method)应遵循类似的处理方式:

 

-(void) myAction:(id)sender{  

       UISegmentedControl* control = (UISegmentedControl*)sender;  

       if(control == myControl1){  

        /*查询控件得值*/  

      /*响应myControl1的动作*/  

       }  

}  


    
[3] libjingle源码分析之4:Session和Transport
    来源: 互联网  发布时间: 2014-02-18
libjingle源码分析之四:Session和Transport

  • 摘要

        本文介绍了Session和Transport模块。

  • 概述

        Session、SessionClient、Transport和TransportChannel的关系如下图所示:


  • 模块解析
    • SessionClient
      • SessionManager中,按content_type来区分不同的SessionClient,且两端的content_type必须一样。
      • 需要用户实现自己的SessionClient和content_type,并且在初始化的时候添加到SessionManager中,方便创建Session。
      • 接收端,可以等待请求端的消息,实现接收端的Session生命周期管理。
    • Session
      • sid由SessionManager创建,两端对应的sid是一样的。
      • 请求端,创建Session时,多个Session可以绑定同一个SessionClient。
      • 接收端,安照sid和from(请求端的full jid)来查找对应的Session。若Session不存在,先查看对应content_type的SessionClient是否存在,然后创建过程同请求端。
    • Transport
      • 在Session中,用TransportProxy包装,以content_name区分。
      • 默认的实现是P2PTransport,没必要直接使用它。
    • TransportChannel
      • 包含在Transport中,用channel_name区分。
      • 通过Session创建,需要指定content_name和channel_name(即在content_name的Transport下创建channel_name的TransportChannel)。
      • 继承于TransportChannel是TransportChannelImpl,TransportChannel的一个默认具体实现是P2PTransport。
    • SessionManager
      • 未在图中表示。它只是一个辅助类,用来创建Session,将Session和SessionClient绑定。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3