1:重要的结构体 获取的报文是UDP的payload部分,结构体struct dhcpMessage描述了dhcp报文的结构. /* packet.h */ struct dhcpMessage { u_int8_t op; /* 1 for client,2 for server */ u_int8_t htype; /* Ethernet Type (0x01)*/ u_int8_t hlen; /* Ethernet Len(6) */ u_int8_t hops; /* 若封包需要rou…
文章首发于微信公众号<程序员果果> 地址:https://mp.weixin.qq.com/s/47TUd96NMz67_PCDyvyInQ 简介 Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移.我们将此服务称为Eureka Server.Eureka还附带了一个基于Java的客户端组件Eureka Client,它使与服务的交互变得更加容易.客户端还有一个内置的负载…
根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下这个样子: UiObject appsTab = new UiObject(new UiSelector().text("Apps")); appsTab.click() 那么这个过程发生了什么呢?这就是我们接下来要说的事情了.   1. 获取控件信息顺序图 这里依然是一个手画的不规范的顺…
所有的悲伤,总会留下一丝欢乐的线索,所有的遗憾,总会留下一处完美的角落,我在冰峰的深海,寻找希望的缺口,却在惊醒时,瞥见绝美的阳光! --几米 本文为读 lodash 源码的第十八篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbook也会同步仓库的更新,gitbook地址:pocket-lodash 作用与用法 我们都知道,可以借用 Object 原型上的 toString 方法来获取数据的类型. baseGetTag 利用的也是这一特性,其返回的结果如 [o…
在之前的博客springMVC源码分析--AbstractHandlerMapping(二)中我们介绍了AbstractHandlerMethodMapping的父类AbstractHandlerMapping,其定义了抽象方法getHandlerInternal(HttpServletRequest request),我看一下其在AbstractHandlerMethodMapping中的实现.…
1:重要的结构体 读取配置文件信息到全局的结构体struct server_config_t server_config中,这个结构在很多文件中都有引用到很重要. /* dhcpd.h */ struct server_config_t { u_int32_t server; /* Our IP, in network order */ u_int32_t start; /* Start address of leases, network order */ u_int32_t end; /*…
4. HDFS Client ( 未完待续 ) 目录: 4.1 认识 DFSClient ( 未完待续 ) 4.2 输入流 ( 未完待续 ) 4.3 输出流 ( 未完待续 ) 4.4 DistributedFileSystem 的实现 ( 未完待续 ) 4.5 HDFS 常用工具 ( 未完待续 ) 4.5.1 FsShell ( 未完待续 ) 4.5.2 DFSAdmin ( 未完待续 ) 内容:    客户端 DFSClient 和建立在 DFSClient 基础上的 DistributedF…
1:重要的结构体 全局链表的成员struct dhcpOfferedAddr *leases 记录了当前租赁出去的IP信息 /* leases.h */ struct dhcpOfferedAddr { u_int8_t chaddr[]; u_int32_t yiaddr; /* network order */ u_int32_t expires; /* host order */ }; 结构体三个成员分别记录客户端MAC(为什么不是6字节?),租赁出去的IP地址,以及到期时间(time(0…
参考资料 实现代码保存在我的github // input flag 1:FunName 2:CallerFunName func GetFuncName(flag int) string {     if flag != 1 && flag != 2 {     }     pc, _, _, _ := Caller(flag)     return FuncForPC(pc).Name() } 测试代码 func main() {     test() } func test{    …
目录 SecurityManager获取过程 1.SecurityManager接口介绍 2.SecurityManager实例化时序图 3.源码分析 4.总结 @   上篇文章Shiro源码分析之获取SecurityManager工厂获取我们介绍了SecurityManager工厂的获取步骤,本文在此基础上来分析下SecurityManager对象产生的过程. SecurityManager获取过程 1.SecurityManager接口介绍   SecurityManager安全管理器,是S…