- 博客(54)
- 收藏
- 关注
转载 值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.c
2017-04-05 15:57:01 13715 4
转载 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP),使
2017-04-05 09:27:53 729
原创 第三章 IP网际协议
1. IP首部 IP数据报的格式如图。普通的IP首部长为20字节,除非含有选项字段其中总长度字段是指整个IP数据报的字段,以字节为单位。利用首部长度和总字段长度,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长6比特,所以IP数据报最长可达65535字节。2. IP路由选择IP路由选择主要完成以下功能(1) 搜索路由表,寻找能与目的IP地址完全匹配的表目(
2016-01-27 11:54:38 549
原创 第二章 链路层
1. 链路层从上图可以看出,在TCP/IP协议族中,链路层主要有三个目的:(1) 为IP模块发送和接收IP数据报(2) 为ARP模块发送ARP请求和接收ARP应答(3) 为RARP发送RARP请求和接收RARP应答2. 以太网和IEEE 802封装在TCP/IP世界中,以太网IP数据报的封装是在RFC 894中定义的,IEEE 802网络的IP数据报封装是在RFC
2016-01-18 13:51:18 381
原创 第一章 概述
一 IP地址二 封装 当应用程序用TCP传送数据时,没时间被送入协议栈中,然后逐个通过每一次直到被当做一个比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。 TCP传给IP的数据单元称作TCP报文段或简称为TCP段。IP传给网络接口层的数据单元称作IP数据报,更准确地说IP和网络接口层之间传送的数据单元应该是分组(packet),分组既
2016-01-07 15:41:50 335
原创 I/O模型
对于一次IO访问(以read为例),数据先会被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间,所有说让一个read操作发生时,会经历两个阶段:(1) 等待数据准备(Waiting for the data to be ready)(2) 将数据从内核拷贝到进程中(Copy the data from the kernel to the process)
2015-11-26 15:42:44 413
转载 select、poll、epoll之间的区别总结
select、poll、epoll都是IO多路复用的机制。IO多路复用就是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进程响应的读写操作。但select、poll、epoll本质上都是同步IO,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步IO则无需自己负责进行读写,异步IO的实现会负责把数据从内核拷贝到用户控件。
2015-11-26 14:23:05 295
转载 IO多路复用之epoll
1. 基本常识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。现对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关心的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2.epoll接口 epoll操作过程需要三个接口,分别如下:#
2015-11-26 11:43:21 321
转载 IO多路复用之poll总结
1. 基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll与select同样存在一个缺点就是,包含大量的文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2. poll函数
2015-11-25 16:31:19 303
转载 IO多路复用之select
1. 基本概念 IO多路复用是指内核一旦发现进程指定的一个或多个IO条件准备就绪,它就通知该进程。IO多路复用使用如下场合: (1) 当客户处理多个描述符时(一般是交互式输入和网络套接口),必须使用IO复用 (2) 当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3) 如果一个TCP服务器既要处理监听套接口,又要处理已有连接套接口,一般也
2015-11-25 14:07:51 636
原创 第三章 套接字编程简介(2) - 字节序
1. 字节序排序函数系统所用的字节序称为主机字节序,网络协议必须指定一个网络字节序。这两张字节序直接的转换使用一下4个函数#include // 将主机字节序转换为网络字节序uint16_t htons(uint16_t host16bitcalue);uint32_t htonl(uint_32 host32bitvalue);// 强网络字节序转换为主机字节序uin
2015-11-20 16:18:59 290
原创 第三章 套接字编程(1) - 套接字地址结构
套接字地址结构1. IPv4套接字地址结构 IPv4套接字地址结构通常称为“网际套接字地址结构”,它以sockadd_in命名,定义在头文件中。 struct in_addr{ in_addr_t s_addr; /*32位IPv4地址,网络字节序*/ }; struct sockaddr_in{ ui
2015-11-20 15:05:43 838
原创 第二章 传输层:TCP、UDP和SCTP(3)—端口号
端口号被划分为3段1. 0~1023 这些端口由IANA分配和控制2. 1024~49151 已登记的端口,这些端口不受IANA控制,不过由IANA登记并提供它们的使用情况清单3. 49152~65535 动态或私用的端口。IANA不管这些端口,它们就是通常所称的临时端口。
2015-11-20 11:47:17 1969
原创 第二章 传输层:TCP、UDP和SCTP(2)—TCP连接的建立和终止
1. 三次握手建立一个TCP连接时会发生下述情形(1) 服务器必须准备好接受外来的连接。这通常通过调用socket、bind和listen这3个函数来完成,称之为被动打开。(2) 客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只包含一个IP首部、
2015-11-20 11:28:13 373
原创 第二章 传输层:TCP、UDP和SCTP(1)
1. TCP/IP协议族总图IPv4 网际协议版本4(Internet Protocol version 4)。使用32位地址。IPv4给TCP、UDP、SCTP、ICMP和IGMP提供分组递送服务。IPv6 网际协议版本6(Internet Protocol version 6)。使用128位地址。给TCP、UDP、SCTP和ICMPv6提供分组递送服务。TCP
2015-11-20 09:57:34 490
原创 第一章实例
客户端代码//#include "unp.h"#include #include #include // bzero()头文件#include #include #include #define MAXLINE 4096#define SA struct sockaddrint main(int argc, char **argv){ int
2015-11-19 17:11:57 272
原创 压缩解压命令
命令名称:gzip命令英文原意:GNU zip命令所在路径:/bin/gzip执行权限:所有用户语法:gzip 选项 [文件]功能描述:只能压缩文件,不能压缩目录,不保留源文件压缩后文件格式:.gz例如:$gzip newfile命令名称:gunzip命令英文原意:GUN unzip命令所在路径:/bin/gunzip执行权限:所有用户语
2015-10-15 16:32:09 320
原创 帮助命令
命令名称:man命令英文原意:manual执行所在路径:/usr/bin/man执行权限:所有用户语法:man [命令或配置文件]功能描述:获取帮助信息例如:$man ls 查看ls命令的帮助信息 $man services 查看配置文件services的帮助信息命令名称:info命令英文原意:information命令所在路径
2015-10-13 13:58:43 278
原创 文件搜索命令
命令名称:which命令所在路径:/usr/bin/which执行权限:所有用户语法:which [命令名称]功能描述:显示系统命令所在目录范例:$which ls命令名称:find命令所在路径:/usr/bin/find执行权限:所有用户语法:find [搜索路径] [搜索关键字]功能描述:查找文件或目录范例:$find /etc -nam
2015-10-13 11:46:22 274
原创 权限管理命令
命令名称:chmod命令英文原意:change the permissions mode of a file命令所在路径:/bin/chmod执行权限:所有用户语法:chmod [{ugo} {+-=}] [文件或目录] [mode=421] [文件或目录]功能描述:改变文件或目录权限u 所有者,g 所属组, o 其他人
2015-10-10 15:12:20 332
原创 linux文件处理命令
只有root可以执行的命令放在:/sbin目录或者/usr/sbin目录所有用户可以执行的命令放在:/bin目录或者/usr/bin目录命令名称:ls命令英文原来:list命令所在路径:/bin/ls执行权限:所有用户功能描述:显示目录文件语法:ls 选项[-ald] [文件或目录] -a 显示所有文件,包括隐藏文件(a
2015-10-09 17:37:09 257
转载 学习资料
http://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.htmlhttp://www.cnblogs.com/dylantsou/archive/2012/05/13/2498491.html
2015-08-10 17:11:59 249
原创 Go学习1: Hello world
package mainimport ( "fmt" "os" "strings")func main() { who := "world!" // 定义变量who if len(os.Args) > 1 { who = strings.Join(os.Args[1:], " ") } fmt.Println("hello", who) // 输出} Go
2015-06-23 13:26:29 638
原创 Windows 套接字I/O 模型(2) 选择(select)模型
select模型是一个广泛在Winsock中石油的I/O模型。称它为select 模型,是因为它主要是使用select 函数来管理I/O 的。这个模式的设计源于UNIX 系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字。select 函数可以确定一个或者多个套接字的状态。如果套接字上没有网络事件发生,便进入等待状态,以便执行同步I/O。函数定义如下。int
2015-06-10 16:40:56 455
原创 Windows套接字I/O模型(1) 套接字模式
套接字模式简单的决定了操作套接字时,Winsock 函数是如何运转的。Winsock 以两种模式执行I/O 操作:阻塞和非阻塞。在阻塞模式下,执行I/O 的Winsock 调用(如send 和recv)一直到操作完成才返回。在非阻塞模式下,Winsock 函数会立即返回。1 阻塞模式套接字创建时,默认工作在阻塞模式下。例如,对recv 函数的调用会使程序进入等待状态,直到接收到数据才返回
2015-06-10 16:23:07 894
原创 网络对时程序实例
网络对时也就是从Internet 上获得准确的时间,以此来校对本地计算机时钟。通过这样一个实例程序,可以初步了解协议和Winsock 函数的具体应用。1. 时间协议Time Protocol (RFC-868)是一种非常简单的应用层协议。它返回一个未格式化的32位二进制数字,这个数字描述了从1900 年1 月1 日午夜到现在的秒数。服务器在端口37 监听时间协议请求,以TCP/IP 或者U
2015-06-10 15:53:39 1184 1
原创 WinSock编程流程(2)- UDP
TCP 由于可靠、稳定的特点而被用在大部分场合,但它对系统资源要求比较高。UDP 是一个简单的面向数据报的传输层协议,又叫用户数据报协议。它提供了无连接的、不可靠的数据传输服务。无连接是指它不像TCP 那样在通信前先与对方建立连接以确定对方的状态。不可靠是指它直接按照指定IP 地址和端口号将数据包发出去,如果对方不在线的话数据就可能丢失。1. UDP编程流程(1) 服务器端程序设计流程
2015-06-10 14:57:23 3104
原创 Winsock编程流程(1)-TCP/IP
1. 套接字的创建和关闭使用套接字之前,必须调用socket函数创建一个套接字对象,此函数调用成功将返回套接字句柄。SOCKET socket(int af, // 用来指定套接示使用的地址格式,WinSock 中只支持AF_INETint type, // 用来指定套接字的类型int protocol // 配合type 参数使用,用来指定使用的协议类型。可以是IPPROTO_TC
2015-06-10 13:53:24 427
转载 同步通信与异步通信区别
同步通信原理 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符 采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。在同步传输过程中,一个字符可以对应5~8位。
2015-06-08 15:38:35 490
转载 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题在《秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量》中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段、事件、互斥量、信号量进行了总结。有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题。因此本文将对事件和信号量作个试验,看看事件和信
2015-05-25 09:18:03 342
转载 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8646902欢迎关注微博:http://weibo.com/MoreWindows 在《秒杀多线程系列》的前十五篇中
2015-05-25 09:17:30 1094
转载 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
在《秒杀多线程第十一篇读者写者问题》文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题。问题虽然得到了解决,但代码有点复杂。本篇将介绍一种新方法——读写锁SRWLock来解决这一问题。读写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程)。对于读取者线程,读写锁会允许他们并发的执行。当有写入者线程在占有资源时,读写锁会让其它写入者线程和
2015-05-25 09:16:50 343
转载 秒杀多线程第十一篇 读者写者问题
与上一篇《秒杀多线程第十篇 生产者消费者问题》的生产者消费者问题一样,读者写者也是一个非常著名的同步问题。读者写者问题描述非常简单,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件。上面是读者写者问题示意图,类似于生产者消费者问题的分析过程,首先来找找哪些是属于“等待”情况。第一.写者要等到没有读者时才
2015-05-25 09:15:15 328
转载 秒杀多线程第十二篇 多线程同步内功心法——PV操作上
阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》《秒杀多线程第八篇经典线程同步信号量Semaphore》《秒杀多线程第九篇经典线程同步总结关键段事件互斥量信号量》《秒杀多线程第十篇
2015-05-25 09:14:16 306
转载 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
前面《秒杀多线程第四篇一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》《秒杀多线程第八篇经典线程同步信号量Se
2015-05-25 09:13:09 432
转载 秒杀多线程第十篇 生产者消费者问题
继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区
2015-05-25 09:12:13 511
转载 秒杀多线程第七篇 经典线程同步 互斥量Mutex
阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》 前面介绍了关键段CS、事件Event在经典线程同步问题中的使用。本篇介绍用互斥量Mutex来解决这个问题。互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问。互斥量与关键段的行
2015-05-25 09:11:26 382
转载 秒杀多线程第八篇 经典线程同步 信号量Semaphore
阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》 前面介绍了关键段CS、事件Event、互斥量Mutex在经典线程同步问题中的使用。本篇介绍用信号量Semaphore来解决这个问题。
2015-05-25 09:10:50 302
转载 秒杀多线程第六篇 经典线程同步 事件Event
阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇 一个经典的多线程同步问题》《秒杀多线程第五篇 经典线程同步关键段CS》 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使用事件。事件Event实际上是个内核对象,它
2015-05-25 09:10:48 345
转载 秒杀多线程第五篇 经典线程同步 关键段CS
上一篇《秒杀多线程第四篇 一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。 函数功能:初始化函数原型:
2015-05-25 09:09:46 356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人