- 博客(14)
- 资源 (7)
- 收藏
- 关注
原创 【数据结构】图的邻接矩阵存储实现
图的邻接表存储实现:http://blog.csdn.net/wenqian1991/article/details/24667287图的邻接表DFS和BFS算法:http://blog.csdn.net/wenqian1991/article/details/24812393这里则介绍图的另外一种存储方式:邻接矩阵。参考资料《大话数据结构》《C算法:卷二》一、图的数据结构图的邻接
2015-07-29 11:05:53 8160
原创 【数据结构|剑指Offer】单向链表的各项操作实现
本博文着重实现《剑指Offer》上面的单向链表操作。//数据结构struct ListNode{ int data; ListNode *next; ListNode(int x) :data(x), next(NULL) {}};//在链表尾部添加结点void AddToTail(ListNode **pHead, int value){ ListNode *pNew =
2015-07-27 12:10:44 973
原创 【设计模式】单例模式(singleton pattern)
单例模式(singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。如何保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。一个更好的办法是,让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法,这就是 Singleton 模式。Singleton 类UML图
2015-07-21 21:52:38 799
原创 【Linux 内核网络协议栈源码剖析】recvfrom 函数剖析
继前篇介绍完sendto 数据发送函数后,这里介绍数据接收函数 recvfrom。一、应用层——recvfrom 函数对于这个函数有必要分析一下,先看看这个dup例子。服务器端中调用recvfrom函数,并未指定发送端(客户端)的地址,换句话说这个函数是一个被动函数,有点类似于tcp协议中服务器listen 之后阻塞,等待客户端connect。这里则是服务器端recvfrom后,等待客户端
2015-07-16 19:14:26 16408
原创 【Linux 内核网络协议栈源码剖析】sendto 函数剖析
前面介绍的函数基本上都是TCP协议的,如listen,connect,accept 等函数,这都是为可靠传输协议TCP定制的。对于另一个不可靠udp协议(通信系统其可靠性交由上层应用层负责),则主要由两个函数完成,sendto 和 recvfrom 函数。这里先介绍 sendto 函数。对于 udp 协议的介绍和编程实现请参考下文:UDP 客户/服务器简单 Socket 程序简要介绍下UD
2015-07-16 10:24:43 12760 5
原创 【Linux 内核网络协议栈源码剖析】ARP地址解析协议
ARP地址解析协议理论前篇参见ARP与RARP,这里则通过源码(Linux kernel 1.2.13;net\inet\arp.c)来剖析其内部原理及实现过程。
2015-07-09 20:54:20 6870 2
原创 【Linux 内核网络协议栈源码剖析】accept 函数剖析
好,tcp 协议建立连接的几个函数到这,就还差个accept 函数,这里直接贴代码了,不再向前面那般赘述了。一、应用层——accept 函数该函数返回一个已建立连接的可用于数据通信的套接字。#include int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);//返回:非负描述子——成功,-1——
2015-07-07 21:55:56 4649 1
原创 【Linux 内核网络协议栈源码剖析】数据包接收(含TCP协议状态变换)
接前文connect 函数剖析(一)接收数据包函数,release_sock 函数是在 sock.c中,该函数是在 inet socket 层,其内部的数据结构为 sock 结构该函数被 tcp_connect 函数最后调用,用于接收数据包//如果对应的套接字正忙或被中断,则将数据包暂存到sock结构back_log队列中,这不能算被接收//数据包要插入receive_queue
2015-07-07 21:39:28 4923
原创 【Linux 内核网络协议栈源码剖析】connect 函数剖析(二)
网络层——ip_build_header 函数前篇(跳跃有点大,记得理清思路找到被调用位置,参见connect(一))介绍的 tcp_connect 函数内部调用了 build_header函数,实则是ip层的 ip_build_header 函数,该函数的主要功能是创建合适的 mac和ip头部/* * This routine builds the appropriate hard
2015-07-07 15:14:03 2081
原创 【Linux 内核网络协议栈源码剖析】数据包发送
release_sock 函数是在 sock.c中//如果对应的套接字正忙或被中断,则将数据包暂存到sock结构back_log队列中,这不能算被接收//数据包要插入receive_queue中才能算真正完成接收//release_sock函数则是从back_log中取数据包重新调用tcp_rcv函数对数据包进行接收void release_sock(struct sock *sk)
2015-07-06 10:53:12 4814
原创 【Linux 内核网络协议栈源码剖析】connect 函数剖析(一)
TCP客户用 connect 函数来建立与 TCP 服务器的连接,其实是客户利用 connect 函数向服务器端发出连接请求。1、应用层——connect 函数#include int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);/*sockfd是由socket函数返回的套接口描述字,第
2015-07-02 09:17:03 5212
原创 【Linux 内核网络协议栈源码剖析】listen 函数剖析
listen 函数仅供服务器端调用,把一个未连接的套接字转换为一个被动套接字,指示内核应接受指向该套接字的连接请求。1、应用层——listen 函数#include int listen(int sockfd, int backlog);/*sockfd是bind之后的套接口描述字,第二个参数规定了内核应该为相应套接口排队的最大连接个数*/2、BSD Socket 层——sock_li
2015-07-01 18:48:15 2908
原创 【Linux 内核网络协议栈源码剖析】bind 函数剖析
bind 函数主要是服务器端使用,把一个本地协议地址赋予套接字。1、应用层——bind 函数#include int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);/*sockfd是由socket函数返回的套接口描述字,第二个参数是一个指向特定于协议的地址结构的指针,第三个参数是该地址结构的长度*
2015-07-01 16:52:26 3379 1
原创 【Linux 内核网络协议栈源码剖析】socket 函数剖析
深度剖析网络协议栈中的 socket 函数,可以说是把前面介绍的串联起来,将网络协议栈各层关联起来。
2015-07-01 12:43:57 7026 4
排序二叉树完整代码
2014-03-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人