自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 收藏
  • 关注

原创 子类化(SubclassWindow)技术

窗口子类化的作用窗口子类化技术最大的特点就是能够截取 Windows的消息。一旦用户自定义的窗口函数截取了传向原窗口函数的消息,就可以对被截取的消息进行如下处理:将其传给原来的窗口函数。这是对大多数消息应该采取的措施,因为子类通常只对原来的窗口特性作少量的改动截取该消息,阻止其向原窗口函数发送。修改该消息,修改完毕以后再向原窗口函数发送。Windows SDK提供了一些设计

2014-04-28 22:49:04 773

原创 初始化用户表和房间表的代码 以备忘

declare @user_id int;declare @str_user_id varchar(16);declare @room_id int;--删除用户表原有的数据,并初始化用户表DELETE FROM [User]SET @user_id=1;SET @room_id=1;WHILE @room_idBEGINWHILE @user_id B

2014-04-28 17:01:12 552

原创 查看本机IP地址

只需要在cmd命令提示符中输入:ipconfig 命令,下面将为你详细的介绍怎么查看本机IP地址的详细步骤和方法。

2014-04-26 23:14:36 2024

原创 SQL中随机数函数rand()

在SQL Server中,有个随机函数rand(),

2014-04-18 00:50:11 20271

原创 c++中 如何前置声明一个名称空间中的类

//file A.hnamespace A{ class ClassA { };};//file B.hnamespace A{ class ClassA;};namspace B{ class ClassB { public: Class B(); private: A::Class

2014-04-13 13:19:23 1025

原创 gethostbyname获取IP地址

#include int GetIPAddr(LPCSTR hostname){ int nAdapter = 0; //适配器数目 if(AfxSocketInit()) { HOSTENT *pHostEnt = gethostbyname(hostname); if(pHostEnt) { if(pHostEnt->h_addrty

2014-04-13 12:20:28 697

原创 socket结构和几个IP地址转换函数

通用的结构体:struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};编程时常用的struct sockaddr_in {short int sin_family; /* Add

2014-04-12 19:48:22 435

原创 关于_bstr_t和 _variant_t

先见源码:class _bstr_t {public: // Constructors // _bstr_t() throw(); _bstr_t(const _bstr_t& s) throw(); _bstr_t(const char* s) throw(_com_error); _bstr_t(const wchar_t* s) throw(_com_erro

2014-04-10 18:08:01 556

原创 关于SOCKET中send和recv函数工作原理总结

send函数工作原理:     send函数只负责将数据提交给协议层。 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR; 如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据; 如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中

2014-04-09 22:05:38 422

原创 LOWORD, HIWORD, LOBYTE, HIBYTE

LOWORD()得到一个32bit数的低16bit  HIWORD()得到一个32bit数的高16bitLOBYTE()得到一个16bit数最低(最右边)那个字节HIBYTE()得到一个16bit数最高(最左边)那个字节

2014-04-09 15:17:36 660

转载 setsockopt()函数用法

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历

2014-04-09 00:33:16 420

原创 C++ 中通过GetAdaptersInfo获取网卡配置和Ip地址信息

一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址;如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种;因此,如果要获得本机所有网卡的IP和MAC地址信息,则必须顺序获得每个网卡,再依次获取其信息等;在windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等,该结构体

2014-04-08 21:09:25 809

原创 winsock API积累

一、WSAStartup函数int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); 使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本

2014-04-08 20:03:41 414

原创 解读宽字符

wchar_t宽字符是是由两个ACII码字符构成的。 从代码解读:

2014-04-08 14:23:46 355

原创 winsock之 TCP/IP的简单编程

//使用WinSock库之前,要做准备工作,即调用WSAStartUp初始化WinSock库。初始化后,才能使用WinSock库//使用完WinSock库后,要做清理工作,即调用WSACleanUp清理//这个工程的目的是:启动服务器监听客户端的连接请求,如果服务器收到客户端的连接请求,执行Accept接受客户端的连接请求返回一个与这个客户端通信的socket。然后使用这个socket与这

2014-04-08 13:36:41 713

原创 多字节字符串与UNICODE字符串的互相转换

多字节字符串转换为UNICODE字符串

2014-04-08 11:40:23 2064

原创 windows查看某个端口号被占用并结束此进程 [转]

windows查看某个端口号被占用并结束此进程 1、netstat -ano |findstr 3306 //查看3306端口是否存在2、tasklist |findstr 3036(PID号)//查看pid为3036的是什么程序在用3、taskkill /T /F /PID 3036 //强制(/F参数)杀死pid为3036的所有进程包括子进程(/T参数)

2014-04-08 10:44:08 424

原创 windows7开启端口的方法

打开“控制面板”中的“Windows防火墙”,点击左侧的“高级设置”右击“入站规则”在快捷菜单中选择“新建规则”在“要创建的规则类型”中选择“端口”,点击“下一步”按钮输入要开启的端口号,如“11901“点击“下一步”选择“允许连接”,点“下一步”可按默认选中“域”“专用”“公用”,点击“下一步”最后输入名称和描述,名称最

2014-04-08 10:39:14 816

原创 如何理解signal函数声明

Signal函数用起来其实很简单,但是回头看看他的声明,相信会有很多人表示费解。自己也在这个问题中纠结了好几年了,今天终于弄明白,很是兴奋,一起分享一下。  先看函数原型:void (*signal(int signo, void (*func)(int)))(int);对于看惯了类似unsigned int sleep(unsigned int seconds);这种声明的人们来说,sign

2014-04-08 00:07:43 598

原创 最近在使用sprintf构造字符串时遇到的一个问题

直接上代码:#include #include int main(){ char szTmp[20] = {0}; char szDst[20] = {0}; int i; memset(szTmp, 'a', sizeof(szTmp)-1); sprintf(szTmp, "%d", 2);

2014-04-08 00:03:53 1283

原创 互斥对象锁和临界区锁性能比较

在Win32平台上进行多线程编程,常会用到锁。下边用C++实现了互斥对象(Mutex)锁和临界区(CRITICAL_SECTION)锁,以加深理解和今后方便使用。代码已在VS2010环境下编译测试通过。Lock.h#ifndef _Lock_H#define _Lock_H#include //锁接口类class ILock{public: virt

2014-04-07 22:38:12 399

原创 用C读取INI配置文件

在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容,但是在Linux平台上就一筹莫展了。为了解决该问题,打算用C来读取.ini,即可不受平台的限制了。

2014-04-07 22:21:13 348

原创 TCP协议可靠性数据传输实现原理分析

TCP 协议是一种面向连接的,为不同主机进程间提供可靠数据传输的协议。TCP协议假定其所使用的网络栈下层协议(如IP协议)是非可靠的,其自身提供机制保证数据的可靠性传输。在目前的网络栈协议族中,在需要提供可靠性数据传输的应用中,TCP协议是首选的,有时也是唯一的选择。TCP协议是在最早由Cerf 和Kahn[1]所提出的有关网络数据包传输协议的概念之上建立的。TCP协议

2014-04-07 22:06:46 477

原创 __cdecl与__stdcall

__cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。  __stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入

2014-04-07 20:39:41 331

原创 va_list,va_start,va_end,等的说明

库里的头文件:#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )#define va_arg(ap,t)    ( *(t *)((ap += _INTSI

2014-04-07 20:37:53 344

原创 __declspec(dllexport) 和 __declspec(dllimport)

在使用DLL中的函数或类,变量时使用 __declspec(dllexport) 和 __declspec(dllimport)。 如果DLL和使用DLL的项目是在一个解决方案中,并产生了依赖关系,则使用DLL的项目只需要包含相关的“*.h”,并在项目的属性中添加.h文件所在的目录。 如果仅仅是使用一个DLL(假设是一个exe文件使用),我们 首先包含“*.h”,然后#pragma

2014-04-07 20:34:14 386

原创 TCP连接探测中的Keepalive 和心跳包​

在做服务器时,如果发生客户端网线或断电等非正常断开的现象,如果服务器没有设置SO_KEEPALIVE选项,则会一直不关闭SOCKET。如果设置了SO_KEEPALIVE选项,则会使用操作系统的默认参数进行探测报文的发送。我们参考下MSN的一段话: SIO_KEEPALIVE_VALS (opcode setting: I, T==3) Enables or disables t

2014-04-07 20:31:15 2240

原创 TCP/IP学习之基本概念

学习TCP/IP的总结~1.为什么要分链路层,网络层,运输层,应用层这四层主要依据是各层的功能,链路层主要负责处理物理接口的细节,网络层处理分组在网络中的活动(IP到IP,尽可能快但不可靠),运输层主要提供应用程序端到端的服务(端口到端口,并且可靠),应用层处理特定的应用程序细节。链路协议主要有ARP和RARP,网络层协议主要有ICMP,IGMP和IP协议,运输层协议主要有TCP和UD

2014-04-07 18:59:32 401

原创 TCP/IP学习之 TCP缓冲区大小及限制

主要参考UNIX网络编程。(1)数据报大小IPv4的数据报最大大小是65535字节,包括IPv4首部。因为首部中说明大小的字段为16位。IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部。同样是展16位,但是IPv6首部大小不算在里面,所以总大小比IPv4大一个首部(40字节)。(2)MTU许多网络有一个可由硬件规定的MTU。以太网的MTU为1500字节。有一

2014-04-07 18:58:06 820

原创 TCP/IP学习之 TCP拥塞控制与定时器

TCP的交互数据流和成块数据流经受时延的确认为什么要分这两类呢?如果按照分析数量来计算,约有一半的TCP报文段包含成块数据(FTP、电子邮件),另一半则包含交互数据(Telnet和Rlogin)。成块的报文段基本上都是满长度的,而交互数据则小的多,可能一个交互过程只发送一个字节的数据,而需要传输20个IP的头,20个字节的TCP的头,这个时候网络的利用率就会很低。例如Rlogin需要远程系

2014-04-07 18:56:30 422

原创 TCP/IP学习之 TCP与UDP的 区别

key:TCP是一种面向连接的、可靠的、字节流服务   1.面向链接:TCP面向链接,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须通过三次握手先建立一个TCP连接。在一个TCP中仅有两方彼此通信,多播和广播不能用于TCP。UDP是不可靠的传输,传输前不需要建立链接,可以应用多播和广播实现一对多的通信。 2.可靠性:TCP提供端到端的流量控制

2014-04-07 18:52:16 308

原创 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1              2              3              45              6              7              89              10           11           1213          

2014-04-07 18:49:46 361

原创 数组左边减去右边数值的最大差值

求数组左边减去右边数值的最大差值,如下面的数组,a[] = {5, 11, 3, 10, 6, 1, 8, 4, 3, 2};组大差值为11-1 为10;

2014-04-07 18:48:24 835

原创 排序使得数组负数在正数左边且按照原来的顺序

假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求分别为:o(n),o(1)例如     -3 4 2 -1 7 3 -5  排序后    -3 -1 -5 4 2 7 3 采用整体冒泡的思想,先从后找到第一个负数,然后把这一个负数看成一个“元素”,再看这个负数前面是正数还是负数,如果是负数,

2014-04-07 18:46:34 2741

原创 图的小结

对于图这种数据结构,可以从五个维度来理解:表示方法,搜索算法,最小生成树,最短路径,最大流。一、表示方法邻接表和邻接矩阵通常采用邻接表(Adj)的方法,因为这种方法表示稀疏图(|E|远小于|V|2的图)比较紧凑,所需的存储空间为O(v+E),不足之处在于要确定某一边(u ,v)是否存在只能在顶点u的邻接表Adj[u]中来搜索v。二、搜索算法广度优先搜索和深度优先搜索广度优先

2014-04-07 18:44:33 321

原创 写文章的好处

写文章的好处:第一,写文章是个学习的过程。写的过程中随着自己的思路的进行,会出现理解不清楚的地方,自然就会翻书或者google的搞明白。第二,写文章也可以锻炼自己的表达能力。用最简单语言描述一个问题,这个能力,我想无论什么工作都是很重要的。第三,写文章可以对问题的认识提升一个高度。通过写文章可以整理的自己的思路,引发自己的思考,联系以前的问题,也是一个总结的过程。我的老师的老师曾经对我

2014-04-07 18:37:25 633

原创 线程和进程的联系和区别

1)最主要的就是进程是操作系统资源分配的最小单位,每个进程有自己的独立的地址空间(用户空间)。而一个进程中的所有信息对该进程所有的线程都是共享的包括进程的程序文本,程序的全局内存和堆内存、栈以及文件描述符(这是最根本的区别,也是其他区别的原因)2)线程包含了表示进程内执行环境必须的信息,其中包括进程中标识线程的线程id 、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、erron变量。3)

2014-04-07 17:44:33 322

原创 海量数据问题总结

这个是一系列问题,互联网公司,一些基本的功能都已经做的很完善了,海量数据处理成为重点的问题,也是面试笔试中常考的题目。主要参考http://blog.csdn.net/v_july_v/article/details/62794981.分而治之/hash映射 + hash统计 + 堆/快速/归并排序hash映射很重要,分类后的数据不会分散,某一个类别的数据会全部在一起。用hash_map统

2014-04-07 17:41:58 447

原创 oo的理解

今天发现一本好书,设计模式精解,作者是Alan Shalloway和James R.Trott,薄薄的一本,但是讲的很清楚,也让我对面向对象和设计模式有了多一点的理解。记得去三星实习生面试的时候面试过就问过一个问题,谈谈对面向对象的理解,我当时就只说了一个多态,而且感觉没有条理,所以今天趁着看过书,总结下这个问题。Object Oriented,OO这个概念已经知道很多年了,但是感觉距离真正的

2014-04-07 17:30:36 723

原创 TCP协议中的三次握手与四次挥手

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。  (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。 (2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN

2014-04-07 17:09:54 515

空空如也

空空如也

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

TA关注的人

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