自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (13)
  • 收藏
  • 关注

转载 P2P 之 UDP穿透NAT的原理与实现(附源代码)

P2P 之 UDP穿透NAT的原理与实现(附源代码)原创:shootingstars参考:http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。首先先介绍一些

2013-03-05 15:58:48 1723

转载 二层交换机、三层交换机和路由器的原理及区别

二层交换机:         二层交换技术是发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。具体如下:(1)当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上;(2)再去读取包头中的目的MAC地址,并在地址表中查

2012-12-04 15:45:19 69586 8

原创 TCP 发送机制

TCP建立连接后,同步了各自的syn,并接收了对方的win窗口大小。假设发送5k的数据:情况1:每次发送1024个字节,连续发送5次,不管是否接收到对方的ack,直到发现对方的接收缓冲为0.而此时,接收端在接收到第一包的数据后,并不急于回复发送端ack,而是等待一段时间,一起回复。 情况2: 第一次发送1024,等待接收端回复ack后,第二次发送2个 1024,这种应该

2012-11-29 19:09:22 1269

转载 转:SetConsoleCtrlHandler 处理控制台消息

一、如何处理所有的控制台消息。   第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数。调用Win32 API,原型如下:BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, // 回调函数BOOL Add // 表示添加还是删除);   参数HandlerRoutine是一个指向函数的指

2012-10-09 14:16:14 1201

转载 C++迭代器失效

众所周知当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此很多建议都是让我们获取insert或者erase返回的迭代器,以便用重新获取新的有效的迭代器进行正确的操作:view plaincopy to clipboardprint?iter=vec.insert(iter);    iter=vec.erase(iter);

2012-10-08 22:25:56 743

转载 迭代器失效小结

迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。    首先对于vector而言,添加和删除操作可能使容器的部分或者全部迭代器失

2012-10-08 22:16:37 732

转载 (转)C/C++中的日期和时间 time_t与struct tm转换

摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概念在 C

2012-09-14 15:30:25 1952

转载 c++封装ping程序类

头文件:#pragma once#include class CPing{public: CPing(void); ~CPing(void);  bool CanPing(const char* pDscAddr); void Ping(const char* pDscAddr, int nPackNum = 4, int nPackSize = 32);

2012-08-23 09:13:45 2355

转载 iptable笔记

http://kuangkuang.blog.51cto.com/838/247230 一、netfilter/iptable的理解    这个当初我理解不了,主要是没把netfilter理解清楚。 Netfilter是集成在内核中的,用来定义存储各种规则的。Iptalbe是修改这些规则的工具,修改后存在netfilter里面。数据包进入LINUX服务器时,

2012-08-06 15:45:30 1202

转载 iptables防火墙与NAT服务

iptables防火墙与NAT服务一.防火墙的概述1.简介(1)设置在不同的网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性(2)通过审查经过每一个数据包,判断它是否有相匹配的过滤规则,根据规则先后顺序一一进行比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作,若都不能满足,则将数据包丢弃,从而保护网络安全。(3)可以是一台路由器,也可以是一台

2012-08-05 12:00:45 9081

转载 sniffer帮助理解子网掩码、网关与ARP协议的作用

http://www.cnpaf.net/Class/SNIFFER/200408/573.html通过简单的实验深入透析子网掩码,网关与ARP协议的作用   子网掩码,网关与ARP协议的概念和工作原理是学习网络知识的初学者首先遇到的几个重要的知识点,其中子网掩码与ARP协议的作用和基本工作原理更是思科网络技术学院教程Semester 1中的重点与难点,初学者往往难通过简单的实验深

2012-06-03 09:59:04 1149

转载 SNIFFER帮助理解NAT(WIN2000)

一、普通NAT过程:  采用网络地址转换的方法,可以在使用较少合法IP地址的情况下,让多台主机同时接入Internet。这样在现在依然使用IPv4的情况下,节省大量的宝贵地址。同时,因为在外部网络看来,内部机器时不可见的,这样就为网络增加了一定的安全性。   当一、普通NAT过程:  采用网络地址转换的方法,可以在使用较少合法IP地址的情况下,让多台主机同时接入Internet。这样在

2012-06-03 09:57:55 837

转载 boost::scoped_ptr

boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include#include #include class implementation{publ

2012-06-01 23:06:00 1040

转载 deadline_timer

注意deadline_timer和socket一样,都用 io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维持多个定

2012-06-01 23:02:23 5219 1

转载 查看linux cpu 内存信息

查看cpu信息:cat /proc/cpuinfo  查看内存信息:cat /proc/meminfo  查看硬盘信息:fdisk -l硬盘的使用情况 df 可加参数M

2012-05-25 08:29:03 781

转载 Nagle算法

Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。Nagle算法于1984年定义为福特航空和通信公司IP/TCP拥塞控制方法,这使福特经营的最早的专用TCP/IP网络减少拥塞控制,从那以后这一方法得到了广泛应用。Nagle的文档里定义了处理他所谓的小包问题的方法,这种问题指

2012-05-20 10:36:17 636

原创 TCP 状态总结。

经过自己的实验:客户机 windows,服务器:linux1.客户机建立连接,服务器shutdown。客户机进入CLOSE_WAIT,服务器进入FIN2_WAIT.此时客户机可以正常给服务器发数据。服务器正常回复ack。2.客户机建立连接,服务器close        。客户机进入CLOSE_WAIT,服务器进入FIN2_WAIT.此时客户机可以正常给服务器发数据(以为发送正常,

2012-05-20 09:38:46 1118

转载 send或者write socket遭遇SIGPIPE信号

当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。又或者当一个进程向某个已经收到RST的socket执行写操作是,内核向该进程发送一个SIGPIPE信号。该信号的缺省学位是终止进程,因此进程必须捕获它以免不情愿的被终止。

2012-05-19 23:49:17 1374

转载 Socket 中 常见的返回错误解析

下面列出了几个在客户与服务进程连接中常见的几个 Socket 错误,并分析了原因。后续再逐渐补充吧。ECONNABORTED该错误被描述为“software caused connection abort”,即“软件引起的连接中止”。原因在于当服务和客户进程在完成用于 TCP 连接的“三次握手”后,客户 TCP 却发送了一个 RST (复位)分节,在服务进程看来,就在该连接已由 TCP 排

2012-05-19 23:48:16 2266

转载 socket tcp 产生 rst响应的情况

socket tcp 产生 rst响应的情况(属于硬错误)1.     syn发送到服务器主机,但是目的端口并未运行。则产生一个ECONRFUSED错误。客户端立即返回。比如telnet 192.168.1.55 8889,条件:55主机在局域网上并且可达(也可以换成可以到达的网络ip地址),但是8889这个端口并未使用(可能服务器已经关闭),则服务器(对方主机tcp内核)发送一个rst相应给

2012-05-19 23:43:39 5632 1

转载 多线程环境下对变量的读写操作的原子性问题【baidu】

以下多线程对int型变量x的操作,哪几个需要进行同步:( )A. x=y; B. x++; C. ++x; D. x=1;从表面看上去实在是看不出什么突破口,我们不妨将这些代码译成汇编语言再来分析。 01  x = y; 02  mov eax,dword ptr [y] 03  mov dword ptr [x],eax 04   05

2012-05-06 14:55:40 1032

转载 配置开发支持高并发TCP连接的Linux应用程序全攻略zz

1、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量 的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许 当前用户进程打开的文件数限制:[speng@as4 ~]$ ulimi

2012-05-04 20:40:19 2192

转载 服务器的性能指标

服务器的性能指标    作为一个网络服务器程序,性能永远是第一位的指标。性能可以这样定义:在给定的硬件条件和时间里,能够处理的任务量。能够最大限度地利用硬件性能的服务器设计才是良好的设计。    设计良好的服务器还应该考虑平均服务,对于每一个客户端,服务器应该给予每个客户端平均的服务,不能让某一个客户端长时间得不到服务而发生“饥饿”的状况。    可伸缩性,也就是说,随着硬件能力的

2012-05-01 22:44:53 1700

转载 ASIO的异步方式

ASIO的异步方式2009年10月29日 星期四 下午 4:54嗯?异步方式好像有点坐不住了,那就请异步方式上场,大家欢迎...大家好,我是异步方式和同步方式不同,我从来不花时间去等那些龟速的IO操作,我只是向系统说一声要做什么,然后就可以做其它事去了。如果系统完成了操作, 系统就会通过我之前给它的回调对象来通知我。在ASIO库中,异步方

2012-05-01 22:23:11 1042

转载 ASIO 同步

Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include 名空间using namespace boost::asio;ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写操作对于读写方式,ASIO支持同步和异步两种方式,首先登场的是同步方式,下面请同步方式自

2012-05-01 22:21:21 1071

转载 《多线程服务器的适用场合》例释与答疑

http://blog.csdn.net/Solstice/archive/2010/03/03/5343217.aspx陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice2010 March 3 - rev 01《多线程服务器的适用场合》(以下简称《适用场合》)一文在博客登出之后,有热心读者提出质疑,我自己也觉得原文没有把道理说通说透,

2012-05-01 22:07:20 1060

转载 boost::asio::ip::tcp实现网络通信的小例子

我稍稍整理了下,就是加了点注释,很基本的东西,大家可以参考socket的几个流程,我上面也有提示的,希望对大家有所帮助。最后,如果大家有什么好的方法希望能让我也分享下,谢谢!服务端:#includeboost/asio.hpp>#includeboost/bind.hpp>#includeboost/shared_ptr.hpp>#include

2012-05-01 22:02:15 2107

转载 自己开发的基于boost asio的网络引擎

今天找到了贵论坛,发现坛主的很多想法和本人不谋而合,本人近1年主要精力都致力于开发一个大型多人在线游戏的基本架构和相关的技术模组。而我欣喜的发现我与坛主的研究方向正好相反:我是先从服务器端开始研究入手的,目前服务器端告一段落,正准备开始客户端的研发,在寻找客户端引擎的时候碰巧找到了这里。我看到坛主的这个板块,了解到Orz正需要一些服务器方面的资料,在此我先奉上个人的服务器端的一些成果,希望能有

2012-05-01 22:01:23 3105

转载 boost高并发网络框架+线程池

boost的官方例子,有单线程的网络框架,httpserver2是线程池的。下面参照网上某人的代码修改了一点(忘了哪位大仙的代码了) 测试工具,适用stressmark,测试效果非常好, 9000个/s   #includestdio.h>#include "AuthenHandle.h"#include "configure.h"#

2012-05-01 21:37:29 17675 7

转载 日志 C++的iostream标准库介绍

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。  istringstream类用于执行C++风格的串流的输入操作。  stringstream类同时可以支持C++风格的串流的输入输出操作。  strstream类同时可以支持C风格的串流的输入输出操作。   is

2012-03-08 20:21:57 1204

转载 iostream、printf/wprintf和中文输出

使用C++标准库的iostream,可以方便地将控制台、文件、字符串以及其它可扩充的外部表示作为流来处理,但要处理中文,却会碰到很多问题。本人原来没怎么用过这个iostream,这几天尝试用这个写点东西,一会儿不能输出中文,一会儿不支持中文文件名的,搞得头大。网上搜了搜,没有发现适用于所有情况的解决方案。不过后来自己经过多次测试,基本解决了这些问题,现在写成文字作为一个总结,也供碰到同样问题的朋友

2012-03-08 20:19:32 1450

转载 string变量字符串的结束标志是什么,我看书上好像和c不一样,c的char *是以"\0"结束但c++好像不是

C++标准库的string不是以'\0'结束,而是string类中有一个记录长度的值(具体怎么实现我不是很清楚,要等看过STL代码或者比我牛的大牛来给你说)但是C++中的string你要得到它有多长,可以这么做string str("abc");str.size();str.length(); //都返回3而且,str中不会以'\0'判断字符串结束,可以这样stri

2012-03-08 20:18:51 8172

转载 宽字符处理函数函数与普通函数对照表

宽字符处理函数函数与普通函数对照表              字符分类:     宽字符函数普通C函数描述     iswalnum()     isalnum() 测试字符是否为数字或字母     iswalpha()     isalpha() 测试字符是否是字母     iswcntrl()     iscntrl() 测试字符是否是控制符     iswdigit()     isdigi

2012-03-08 20:17:54 2836

转载 多个线程调用同一个线程函数

多个线程调用同一个线程函数 悬赏分:50 - 解决时间:2007-12-11 13:59 如题,能这样吗?因为有很多个操作,但是这些操作都是一样的,所以想用相同的线程函数,但是感觉运行时线程还是一个一个运行,并没有提高速度,应该是我理解错了!!老大些帮帮忙,给个建议 问题补充:我的意思是线程处理函数,刚刚找了点资料,觉得这想法没有错,只要线程里面不用全局或者静态变量

2012-03-08 20:15:53 10458

转载 交换机 路由器 HUB区别

集线器(HUB)是中继器的一种形式。它工作在物理层,与中继器一样,常用于两个网络节点之间物理信号的双向转发。完成信号的复制,调整和放大功能。不同的是HUB能提供多端口服务。 交换机(SWITCH)类似于HUB,能连接两个局域网段。它工作在数据链路层,能起到过滤帧的作用。SWITCH检测帧的源地址及目的地址。如果在同一网络段则不转发。如果不在同一网段,就把帧转发到另一网段。 公司的几

2012-03-08 20:14:39 1713

转载 Linux实用代码--文件系统操作

这篇文档实用性很强,它不是讲某个命令的参数具体含义,而是从实际工作的角度来考虑,完成什么工作需要什么指令。  文件系统操作是最基本的操作,没有文件系统,操作系统根本就运行不了。  下面是我们经常要做的一些事情。在下面具体参数意义不解释,要了解这些  可以查询该命令帮助文档  1. 创建目录     mkdir     NO1. 在当前路径

2012-03-08 20:13:04 657

转载 Linux学习笔记

该文章是小弟学习linux归纳出来的一些基础知识,也是做为自己的参考资料,希望各位渴望学习linux的朋友们共同学习。 1、linux分区 --在linux里面所有的设备、任何东西,在linux看来都是文件。 --文件在它看来,有两种形式:   第一种是字符型(键盘输入、打印机);   第二种是二进制型(硬盘、光驱、U盘) --linux中所有硬件 --手动

2012-03-08 20:12:21 566

转载 Linux find命令详解

由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。一、find 命令格式1、find命令的一般

2012-03-08 20:11:21 502

原创 Linux 启动时,先读取用户环境变量,即 /home/defonds/.bashrc 的设置。次读取所有用户环境变量,即 /etc/profile 中的配置。

Linux 启动时,先读取用户环境变量,即 /home/defonds/.bashrc 的设置。次读取所有用户环境变量,即 /etc/profile 中的配置。

2012-03-08 20:10:22 1334

转载 配置/etc/exports文件

http://book.51cto.com/art/200808/85173.htm7.2.2  配置/etc/exports文件用户可以把需要共享的文件系统直接编辑到/etc/exports文件中,这样当NFS服务器重新启动时系统就会自动读取/etc/exports文件,从而告诉内核要输出的文件系统和相关的存取权限。在下面的例子中显示了/etc/exports文件中几个条目项的内容,被挂

2012-03-08 20:09:34 7409

RealView+MDK+Jlink+Mini2440测试程序移植(成功)

RealView+MDK+Jlink+Mini2440测试程序移植(成功)

2011-01-03

STM32启动模式说明

STM32启动模式说明详细的说明让你对stm32有一个更加深刻的了解

2010-03-09

Windows CE.net内核定制及应用开发

Windows CE.net内核定制及应用开发Windows CE.net内核定制及应用开发Windows CE.net内核定制及应用开发

2010-03-09

\KEIL入门教程-中文\KEIL入门教程-中文

\KEIL入门教程-中文\KEIL入门教程-中文\KEIL入门教程-中文\KEIL入门教程-中文\KEIL入门教程-中文

2010-03-09

STM32+FLASH的3种烧写方式STM32+FLASH的3种烧写方式

STM32+FLASH的3种烧写方式STM32+FLASH的3种烧写方式STM32+FLASH的3种烧写方式STM32+FLASH的3种烧写方式

2010-03-08

推免与开漏区别推免与开漏区别.doc

推免与开漏区别推免与开漏区别推免与开漏区别推免与开漏区别推免与开漏区别推免与开漏区别推免与开漏区别

2010-03-08

windowce的俄语支持包

windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包windowce的俄语支持包

2010-03-06

ft232bmft232bmft232bmft232bmft232bm

ft232bmft232bmft232bmft232bmft232bmft232bmft232bmft232bmft232bmft232bmft232bm

2010-03-06

C语言资料\ARM(44b0)初学者总结.txt

C语言资料\ARM(44b0)初学者总结.txtC语言资料\ARM(44b0)初学者总结.txtC语言资料\ARM(44b0)初学者总结.txt

2010-03-06

百度最新笔试题目 编程思想

百度最新笔试题目 编程思想百度最新笔试题目 编程思想百度最新笔试题目 编程思想百度最新笔试题目 编程思想

2010-03-06

硬件工程师对上拉电阻的泣血总结

硬件工程师对上拉电阻的泣血总结,相信你对上拉电阻会有一个更深刻的认识

2010-03-06

电容作用的毕生泣血总结

电容过是一个非常小的器件,但是它却又非常大的功能,这是一个硬件工程师的毕生总结,捷径就在眼前

2010-03-06

arm最经典的300个问题

非常有利于加深印象,是非常好的学习资料,不管你学过过久,能回答上来确实不容易

2010-03-06

空空如也

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

TA关注的人

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