自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

认知 行动 坚持

涛哥不知何许人也,亦不详其姓字。闲静少言,不慕荣利。好读书,求甚解。常著文章自娱,颇示己志。忘怀得失,有始有终...

  • 博客(60)
  • 资源 (19)
  • 收藏
  • 关注

原创 再谈函数指针/回调函数的用途------基础类如何调用主调模块

最近看一个网络库的源码, 其中涉及到TCP的收包, 我们都知道, tcp收包的时候, 要处理好粘包问题, 也就是说, 在网络基础库中, 要判断收包的完整性。 而收包是否完整, 这是由应用程序逻辑来决定的, 此时, 就涉及到基础库调用主调模块呢?        怎么搞起呢? 利用函数指针, 把待调的函数的指针告诉基础库, 基础库处理的时候,调用函数指针就行了, 这样就OK了。       

2017-06-30 23:46:42 7050 1

原创 tcp send函数发送的最大长度可以超过65535字节吗?

在前面的文章中, 我们说过, udp socket中, sendto函数单次发送的最大业务数据是65507字节, 并给出了理论的计算方式。 那么, TCP包同样被IP包包住, 表面上看, 好像是TCP包不能超过65535个字节, 所以send函数不能超过65535个字节, 可实际呢? 先说结果, 实际上, 如果send函数的长度过大, 那么会分为多个tcp包来发, 如下:#in

2017-06-30 22:18:05 25148 6

原创 udp sendto的数据会分包发送吗?

在前面的文章中, 我们说过, udp的最大业务数据报的大小为65507个字节, 调用send后, 这些数据是一次udp包发送的吗? 来看看:#include #include #include #include #include #include #include #include int main(int argc, char *argv[]){ struct s

2017-06-30 22:00:52 10749 2

原创 我曾经以为内存泄露就是内存逐渐减少,于是内存逐渐丢失了, 要去买新内存条了。

我是大学毕业后的一段时间, 第一次听说内存泄露的。 当时觉得, 内存泄露好严重啊, 计算机的内存在不断减少, 于是计算机在不断损坏, 要去买新的内存了。          可悲可叹。

2017-06-29 22:58:33 7375 3

原创 正在被执行/打开的文件, 能删除掉么?------linux和Windows不一样

大学的时候, 那时还没电脑, 于是用同学的电脑, 不知怎么搞的, 我弄个让一个文件没法删除, 紧张得不得了。 后来, 同学说, 关机后, 重启就好了。 到后来我才明白, 原来是有进程死死地拽住了这个文件, 所以无法删除。 我相信大家也经常遇到这种问题。         在linux上就不一样了, 可以删除。         对于可执行程序也是如此。 说话废话: 因为linux是linux,

2017-06-29 22:45:18 10578 2

原创 iRet和iRetCode导致的bug

最近代码中混用了iRet和iRetCode,  出现了bug, 大约10多分钟才搞定。        代码风格和编程习惯真不是一句废话。

2017-06-29 22:36:31 7277 1

原创 用实际程序来测试udp sendto函数的最大发包大小------为什么是65507?

我们知道, IP包头有一个16bit的长度, 对应的二进制最大值是2^16 -1,也就是说一个IP包整个长度的最大值是2^16 - 1 字节, 如果考虑UDP通信, 那么除去IP头的20个字节, 除去UDP头的8个字节, 还剩2^16 - 1 - 20 - 8 字节。 我们来玩玩程序(本文只以客户端发数据为例)。

2017-06-29 22:16:15 10795 2

原创 关于udp socket recvfrom函数的一个易错问题: 如果应用程序指定的接收长度不够怎么办?

我们来看这样一个问题, 在udp socket变成中, sendto连续三次发送10个字节的数据,

2017-06-29 22:07:24 19338 8

原创 IP包头的两个长度分别是什么意思? TCP包头中的长度又是什么意思?------肉眼解析IP/TCP包

我们来看这样一个IP包:23:57:05.744655 IP 10.100.70.139.34209 > 10.100.70.139.19006: Flags [P.], seq 1:7, ack 1, win 171, options [nop,nop,TS val 1173340681 ecr 1173337789], length 6 0x0000: 4500 003a

2017-06-28 01:04:01 17250

原创 用shell来发tcp包

经常用tcpdump抓包来倒腾和学习, 但怎么触发tcp包呢? 写一个客户端程序, 然后朝server上发包, 肯定可以, 但还有更简单的方法:exec 8<>/dev/tcp/10.100.70.139/19006echo -e "stats" >&8          用tcpdump抓包的结果为:xxxxxx$ sudo tcpdump -iany port 19006 -Xnlp

2017-06-28 00:02:49 13606 1

原创 tcpdump中的Flags [S.]和Flags [.]是什么意思?------顺便看看三次握手包

我们用telnet发起tcp连接, 建立三次握手, 抓包来看看:xxxxxx$ sudo tcpdump -iany port 19006 -Xnlps0tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on any, link-type LINUX_SLL (Linux

2017-06-27 23:17:09 41690 12

原创 用tcpdump来抓包和分析IP/TCP的结构

抓包:xxxxxx$ sudo tcpdump -iany port 5432 -Xnlps0tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 by

2017-06-27 22:59:34 9574 1

原创 tcpdump抓的是哪一层的包?

tcpdump很强大, 导致有些同学以为它抓的是物理层面上的二进制流, 其实不然。 它抓的是网络层的数据, 如下:xxxxxx$ sudo tcpdump -iany port 3721 -Xnlps0tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on any, lin

2017-06-27 07:58:35 17704 2

原创 孤儿进程示例分析

父进程创建子进程后, 父进程先挂了, 于是子进程成了孤儿进程, 被新的init进程所领养。        来看代码:#include #include int main(){ int pid = 0; pid = fork(); if(pid < 0) { printf("error1\n"); return 1; } if (0 == pi

2017-06-27 07:55:37 7449 3

原创 谈谈误解------为什么select支持的fd数量有限制,而poll/epoll等支持的fd数量没有限制?

很多书本和网上都说: poll/epoll比select好的地方之一在于:select支持的最大fd数量有限制,而poll/epoll等支持的最大fd数量没有限制。 这句话本身没有太多问题, 但我纳闷, 一般来说,  单个进程(在一个典型的linux机器上,  比如我的机器就是这样)能打开的最大fd数据为1024, 你说select能最多能支持1024个fd, 我理解。 但你说poll/epoll

2017-06-25 17:21:49 12789 4

转载 一起 select 引起的崩溃------core dump

转载地址: http://blog.codingnow.com/2014/02/select_bug.html2 月 13 日,陌陌争霸 计划在下午 16:00 例行维护,之前已经稳定运行了很长时间了。没想到在 14:30 左右,有一台从机意外崩溃。再次之前,从机崩溃并不会引起系统坏死,只需要新启动一台从机即可。但这次似乎不一样,所有玩家均不能登陆游戏,不得已,提前进行了长达两

2017-06-25 17:00:13 8017 3

转载 我用select做多路复用踩到的坑------core dump

转载地址: http://blog.csdn.net/haust_wang/article/details/50995644既然说是用select踩到的坑,那么就先直接贴一段使用select的代码上来瞅一下:[cpp] view plain copy  bool SocketAction(int fd, const char* buf,

2017-06-25 16:58:16 7480 1

原创 select的fd超过1024将会非常危险------select导致core dump (句柄增多/句柄泄露引起)

在一般系统上, 进程打开的句柄数目是1024, 但在有的系统上, 却不是这个数, 举个栗子:yyyyyy$ ulimit -n100001       下面,我们来看看程序:#include #include #include #include #include #include #include #include #include

2017-06-25 16:52:09 9520 2

原创 用linux命令和程序实际测试一下单进程能打开的最大的句柄数(也可以说是文件数)------并不一定是1024/2048哈

本文中, 我们继续来做小实验, 看看linux单进程能打开的最大的句柄数(其实也是文件数, 因为linux下一切皆文件嘛),  命令如下:xxxxxx:~/network> ulimit -acore file size (blocks, -c) unlimiteddata seg size (kbytes, -d) unlimitedschedul

2017-06-25 15:50:10 9467 1

原创 select的fd超过1024将会非常危险------FD_SET导致core dump

关于linux select无须多说, 来看代码:#include#include#include#include#include#includeint main(int argc, char *argv[]){ if(argc != 2) { printf("para error\n"); return -1; } struct timeval tv

2017-06-25 15:20:03 11940

转载 Linux select 文件描述符1024限制------此处容易导致core dump

转载地址: http://blog.csdn.net/sxtobj/article/details/53170782最近系统出现宕机的情况,分析core文件,所有的线程都在select处。最后怀疑是文件描述符超过了1024。但是想到Apache也是采用select的io模型。所以还是很不理解。查看了Linux的内核源码linux-2.6.32。static __inli

2017-06-25 12:58:45 8772 1

原创 tcp粘包和nagle算法

在前面的文章中, 我们讨论过tcp粘包问题, 当时考虑的场景是, 如果接收端来不及接受, 那么就会造成粘包, 事实上, 这是tcp粘包的一个原因之一, 这是接收端的粘包。 实际上, 粘包还可能发生在发送端。         接收端的粘包, 基本可以认为是应用程序没有及时读取所造成的。 而发送端的粘包, 则主要归因于TCP nagle算法。             先来看一个生活中的例子

2017-06-25 11:54:57 8848 1

原创 再谈tcp流式传输和udp数据报传输------大家顺便来做做这两个题目!

我的书算是白读了, 这个问题居然是我在工作后才明白的。 我不能怪老师没有讲清楚, 我只能认为自己没有好好学习。 计算机网络这门课, 真是个枯燥无比的东西, 至少我是这么觉得的。 当年在大学时, 貌似是选修课, 全部靠背诵一些无聊又无耻的东西, 最后何老师给我打了60分, 算是一辈子的人情吧。 寝室四个人, 两个人没及格, 我60分, 另外一个60多一点点, 呵呵哒。 学什么计算机网络啊, 课程应该直接从网络编程搞起, 然后逐步编程实践、抓包并分析, 然后深层次地理解

2017-06-25 10:49:05 12505 7

原创 一起来玩linux udp通信程序

         在之前的博文中, 我玩过Windows下的udp, 而linux下的udp也类似, 而且, 相比较tcp而言, 我发现我越来越喜欢udp了。话不多说, 直接上菜:         服务端程序为:#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#include &lt;sys/...

2017-06-25 10:09:33 8800 1

原创 我所经历过的tcp“粘包”及其处理

刚毕业参加工作的时候, 我对计算机网络和网络编程一无所知。 当时要负责一个客户端界面软件的维护和开发, 而另一个“同事”要离职, 哎, 扯远了。         我当时在代码中读到一个注释, 其中有“粘包”二字, 当时比较纳闷: 不都说tcp是好东西吗? 怎么会粘包呢? 可见, 我确实对网络一无所知。 后来, 我发现, 这个客户端居然真的能和服务端通信, 很显然啊, 不然也不会存在这么久。 于

2017-06-25 00:29:10 7724

原创 今天搞清楚了一年半前的那次网络收包错误原因

大约在一年半前, 也就是2005年圣诞的时候, 做了一个圣诞活动的需求。 当时, 我要给后台某服务发送一个通知, 实际上就是一个写请求。 在调试和上线阶段, 鞋操作都是OK的, 而且对方那边收到的收包和回包完全正常, 但是, 我接到对方的回包后, 发现解包错误, 怪哉。        当时时间比较紧, 而且考虑到这个写操作并不十分关键, 我就没有仔细去探究这里的原因。        今天,

2017-06-24 23:51:16 8651 3

原创 后台服务的系统错误和逻辑错误不同

后台服务的系统错误和逻辑错误不同, 怎么说呢?         算了, 不说了, 需要自己好好体会。

2017-06-24 20:03:52 7926 1

转载 socket阻塞与非阻塞,同步与异步、I/O模型------非常值得一看!

转载地址: http://blog.csdn.net/hguisu/article/details/7453390/                                                         socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解     在进行网络编程时

2017-06-24 19:29:57 7481

原创 初玩linux epoll------一个服务器如何与多个客户端进行通信? (笔试面试常考)

select和poll被鄙视得厉害, 因为有了linux epoll的存在。 网上讲解select/poll/epoll的例子不胜枚举, 各种比喻, 各种图示。 其实, epoll并没有那么玄乎。 本文中, 我们不进行画图讲解, 也尽量避免过多的文字描述, 只是初步来感受一下epoll. 服务端代码为:#include #include #include #incl

2017-06-24 17:41:41 9152 4

原创 基于linux poll模型的tcp服务器------一个服务器如何与多个客户端进行通信?

在之前的博文中, 我们一起玩了Windows下的select函数, 实现了一个服务器与多个客户端进行通信。 如果一直到linux, 那几乎是大同小异的。 现在, 我们不说select, 而来接续说说linux poll. 在前面的博文中, 我们也介绍了linux poll检测键盘终端输入, 主要是想在网络编程之前, 对poll的用法有个基本的了解。现在, 来玩一下基于...

2017-06-24 16:06:39 9562 3

原创 玩下linux中的的poll函数------可以用任何描述符号fd而不限于网络socket

前面我们玩了linux中的select函数, 今天我们来介绍一个与之类似的函数, 作用就是做轮询检测, 建议先看select,  再看poll.  至于函数原型和返回值, 就没有必要单独说了, 网上一搜一大堆。       直接上菜:#include #include #include #include #include #include #include #include

2017-06-24 14:40:33 8318 5

原创 tcp超时重传(RTO)之karn算法及其简要实验

我们都知道, tcp是面向连接的可靠传输, 其中的超时重传是可靠性保证之一。 好了, 不扯那么多理论了, 本来来玩一个简要的实验。        前面说过了, telnet ip port命令是在向ip, port发起tcp连接, 假如这个ip, port不存在, 那么客户端自然连接不上, 那么客户端不会因为一次失败而气馁。        试想一下, 你电话给你女朋友, 但你女朋友没有接,

2017-06-24 10:25:36 11870 1

原创 linux alarm函数简介

上代码:#include #include #include #include int main(int argc, char *argv[]) { alarm(5); sleep(20); printf("end!\n"); return 0; }         运行5秒后, 内核向进程发出SIGALRM信息, 进程被终止, 所以上述程序的结果是:Alarm c

2017-06-24 10:01:17 11652 1

原创 nm命令的-C参数

之前说过,nm命令中的结果符号, 是人不可读的, 这主要是因为C++的name mangling机制造成的, 但可以用c++filt进行转化为人为可读的。         实际上, 在nm中加上-C参数, 就可以直接展示为人可读的, 爽爽哒, 这点经常会用到。

2017-06-24 09:26:43 12246

原创 为什么linux select函数的第一个参数总应该是fdmax + 1 ?------poll和epoll不需要+1

先说明一下, 在Windows中, 并不要求select函数的第一个参数总应该是fdmax + 1(在Windows下, 给定-1就行), 那linux中为什么又是呢? 这就涉及到linux select第一个参数的函数: 待测试的描述集的总个数。 但要注意, 待测试的描述集总是从0, 1, 2, ...开始的。 所以, 假如你要检测的描述符为8, 9, 10, 那么...

2017-06-23 08:28:31 15910 3

原创 再次一起来玩linux select函数------可以用任何描述符号fd而不限于网络socket

在之前的网络编程中, 我们经常提到select函数, Windows select和linux select大同小异, 下面, 我们来玩玩linux select, 直接上菜:#include#include#include#include#include#includeint main(){ struct timeval tv; // 超时时

2017-06-22 23:56:49 8038

原创 linux中的 STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO

直接上菜:#include#include#include#include// unistd.h中的一段代码:// #define STDIN_FILENO 0 /* Standard input. */ // #define STDOUT_FILENO 1 /* Standard output. */ // #define STDER

2017-06-22 23:47:28 11172 1

原创 将日志配置文件的error级别改为debug级别, cpu瞬间飙升!

不久前, 为了查问题, 就把日志配置文件的error级别临时改为debug级别, 顺便观察到一个现象: cpu使用率瞬间飙升。 当我改回道error级别后, cpu就降下来了。        这里要注意两个问题:        1.  狂刷log的debug级别, 如果放到外网上跑, 会影响服务性能。 上述事实证明确实如此。        2.  哪天万一遇到cpu飙升, log问题可

2017-06-22 23:41:05 13921

转载 Linux网络编程--recv函数返回值详解

转载地址: http://www.cnblogs.com/Genesis-007/p/5190552.html                说明: 文中红色部分是我的备注函数原型:1ssize_t recv(int sockfd, void *buf, size_t len, int flags);

2017-06-22 00:15:41 10245 1

转载 linux send与recv函数详解------内附代码

转载地址:http://blog.csdn.net/sjin_1314/article/details/9565743 [csharp]view plaincopyprint?1#include2ssize_trecv(intsockfd,void*buff,size_tnbytes,intfl

2017-06-22 00:11:27 23680 6

ipscanner.rar

获取网络的ip, host name和mac地址。我想免费让大家下载, 但csdn规定了必须设置积分, 没办法。

2017-12-01

linux protobuf安装文件

linux, google protobuf, 安装文件。 使用方法:http://blog.csdn.net/stpeace/article/details/53029812

2016-11-04

linux tree命令的源码

很多linux上没有tree命令, 该资源提供了tree命令的源码, 大家可以下载, 编译并安装, 具体请参考:http://blog.csdn.net/stpeace/article/details/49524273

2015-11-01

编译好的openssl库和头文件

编译好的openssl库, 欢迎使用, 具体使用方法, 请见http://blog.csdn.net/stpeace/article/details/41921287

2014-12-14

入门数据库sqlite3的最佳实践资料

入门数据库sqlite3的最佳实践资料, 里面是我打包好的程序, 附加一些数据库工具, 非常可以。 当然你也可以参考我的博文http://blog.csdn.net/stpeace/article/details/38503843

2014-08-12

Wireshark抓包工具

Wireshark抓包分析工具, 非常好用, 非常实用。

2014-06-08

优秀的截图软件

截图软件fast stone. 解压即可使用。 解压后, 可能会产生一些依赖性文件, 请不要轻易删除。

2014-05-25

获取网卡信息所需的头文件和库

获取网卡信息所需的头文件和库:IPEXPORT.H Iphlpapi.h IPHLPAPI.LIB IPRTRMIB.H IPTYPES.H

2013-10-19

哈希值计算软件

可以计算md5, sha1, sha256等哈希值的工具软件,我无法形容它的优秀。

2013-10-18

在Windows下学习Linux命令

在Windows下想学linux命令的同志,你终于找到了该资料。用法:解压,然后双击其中的cmd.exe, 然后就可以输入linux命令了,比如ls等(千万要注意,不要进行路径切换,否则linux命令就执行不了,总之,要确保相应文件在当前目录下)。

2013-08-08

计算机网络第5版谢希仁编配套光盘资料

计算机网络第5版谢希仁编配套光盘资料,这是计算机考研的指定教材对应的资料,你应该拥有它。

2013-07-19

OllyDBG反汇编工具

OllyDBG反汇编工具,非常强大。深化功底,需此工具。

2013-07-19

masm汇编器

微软的汇编器,其中有关键的masm.exe和link.exe,我试过,发现可用。

2013-07-19

word转pdf的插件

word转pdf的插件,直接安装即可,安装完后,“另存”word文档的时候,可以选择pdf(我用的word版本为2007)。

2013-07-18

音频处理软件Gold Wave

一款强大的音频处理软件,可以对音频进行各种处理。例如:如果你在准备某考试,需要听音频资料,但是,你嫌音频太慢,而且你的MP3播放器无法加速,那么你可以用该软件对音频本身进行加速,即改变音频本身,使之变快。另外,在处理的时候,可以实现批处理(我亲自实践过,发现可行)。

2013-07-17

H.264visa软件

一款非常强大的H.264视频码流的解析软件,可以看到解码后视频的像素值,运动矢量,宏块等非常多的信息(也可以打开原始的YUV视频,并看到像素值,但必须先用该软件打开某一H.264视频码流),比Elecard StreamEye软件(有bug)更为强大,我一直用H.264visa,目前没有发现有什么bug. 另外,该软件安装后1个月就会过期,没有关系,1个月后,你重新安装一次即可。

2013-07-13

Elecard StreamEye

Elecard StreamEye,一款分析H.264视频码流的工具,如果你在学习H.264,那么,你应该拥有它。

2013-07-13

YUVviewer :原始的YUV视频的播放器

原始的YUV视频的播放器(软件不是我写的),如果你做视频处理、视频压缩编码、视频通信、视频检索、视频取证,那么你很可能需要它。该软件的缺点是:你无法看到YUV视频的像素值。

2013-06-24

经典的C语言编译器:TC2.0

一款经典的C语言编译器:Borland Turbo C 2.0. 怀念Borland产品的人可以用一下,体验一下DOS下的编程。如果是C语言初学者,建议用MS的VC++6.0. 我试过,该TC2.0可以正常使用。

2013-06-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除