c++
字子昂
这个作者很懒,什么都没留下…
展开
-
mylist.h
#ifndef _MYLIST_H#define _MYLIST_Hstruct list_head{struct list_head *prev;struct list_head *next;}//将结点插入链表尾部//head 为链表的头结点,item为要插入的新结点void list_tail_add(struct list_head *h原创 2014-04-02 16:39:58 · 829 阅读 · 0 评论 -
回调函数的使用
执行某个类的某个函数时,回调另外一个类的同名函数,方法如下:1、typedef void (CALLBACK* ONDISCONNECT)(CWnd*) //定义连接断开事件 class class1 { public: ONDISCONNECT OnDisConnect; //原创 2014-02-24 16:02:08 · 619 阅读 · 0 评论 -
解析包的关键字 获得handler 映射到具体的实现函数 client_packet.h
//处理客户端发送的数据包#ifndef __CLIENT_PACKET_H#define __CLIENT_PACKET_H#include "packet.h"#include typedef struct net_packet CLIENT_PACKET; //客户端数据包原创 2014-03-17 21:07:03 · 901 阅读 · 0 评论 -
根据关键字指派到不同的处理函数 client_packet_dispatcher.cpp
#include#include#include"client_c2s.h"#include"client_protocol.h"#include"client_packet_dispatcher.h"CClientPacketDispatcher::CClientPacketDispatcher(){Init();}CCli原创 2014-03-17 20:52:49 · 451 阅读 · 0 评论 -
入口 OnReadMessage
LRESULT CGMToolDlg::OnReadMessage(WPARAM wParam,LPARAM lParam){int err;/*static link_struct *pLinkHead = NULL;static int state = 0; static int pblen =0;int nReceive = 0;char buf[原创 2014-03-10 15:56:20 · 928 阅读 · 0 评论 -
函数具体的实现 client_c2s.h
#ifndef __CLIENT_C2S_H#define __CLIENT_C2S_H#include "server_packet.h"#include"packet_push.h"#include"packet_pop.h"#includeclass ClientC2S{public:static int Handler_X2C_USER_原创 2014-03-19 14:38:37 · 868 阅读 · 0 评论 -
函数具体的实现 client_c2s.cpp
#include#include#include#include"client_protocol.h"#include"client_message.h"#include"error.h"#include"client_c2s.h"#include"GMToolDlg.h"#include"DialogLogin.h"//static CPacket原创 2014-03-19 14:55:39 · 802 阅读 · 0 评论 -
深层次理解 回调函数
第一个问题:*******************************************************************************其实回调就是一种利用函数指针进行函数调用的过程. 为什么要用回调呢?比如我要写一个子模块给你用, 来接收远程socket发来的命令.当我接收到命令后, 需要调用你的主模块的函数, 来进行相应的处理.但转载 2014-04-02 10:43:25 · 235 阅读 · 0 评论 -
vC2010应用程序的控件风格与设计时显示一致解决方案
在stdafx.h加上以下这句#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' l转载 2014-03-03 15:35:23 · 1007 阅读 · 0 评论 -
根据关键字指派到不同的处理函数 client_packet_dispatcher.h
//客户端数据包处理接口哈希表#ifndef __CLIENT_PACKET_DISPATCHER_H#define __CLIENT_PACKET_DISPATCHER_H#include "handler_hash.h"#include"client_packet.h"//数据包处理接口typedef int (*CLIENT_PACKET_HANDL原创 2014-03-17 20:42:32 · 430 阅读 · 0 评论 -
mylist.cpp
#include#includevoid list_tail_add(struct list_head *head,struct list_head *item){if(head == NULL || item == NULL)return;head->prev->next = item;item->prev = head->prev;head->pre原创 2014-04-02 16:52:03 · 671 阅读 · 0 评论 -
多态
多态性( polymorphisn )是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。覆盖,是指子类重新定义父类的虚函数的做法。重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参转载 2014-07-08 16:22:57 · 790 阅读 · 0 评论 -
链表
1、单向链表(1)创建有关指针,无头节点的单向链表:#include#includestruct LNode{ int data; struct LNode *next;};struct LNode *creat(int n){ int i; struct LNode *head,*原创 2014-02-27 10:45:08 · 856 阅读 · 0 评论 -
数据包加密和解密
加密:void EncodePacket(char *buff,size_t size){原创 2014-04-04 14:01:04 · 4032 阅读 · 0 评论 -
操作记录类 CRecord
//操作记录类 record.h#ifndef __RECORD_H#define __RECORD_H#include"packet.h"class CRecord{ public:CRecord();~CRecord(); public:void Init(char* pID);void Push(char* pBu原创 2014-04-04 11:10:35 · 1031 阅读 · 0 评论 -
MFC限制编辑框只能输入数字
BOOL CGMToolDlg::PreTranslateMessage(MSG* pMsg){if(原创 2014-04-04 10:49:06 · 2671 阅读 · 0 评论 -
定时器用法
1、添加消息 WM_TIMER2、给不同的定时器 define 不同的ID3、SetTimer(定时器ID,1000,NULL); //1000代表一秒4、OnTimer(UINT_PTR nIDEvent) {static int nTime = 0;if(nIDEvent == 定时器ID) {}nTime++;CDialog::On原创 2014-04-04 10:35:18 · 523 阅读 · 0 评论 -
C++指针、数组、引用、变量作函数参数
指针是一个变量,变量里面存储了一个地址。 数组的本质是一个指针,该指针指向一段连续内存的首地址。 C语言本身没有引用,但可以用指针操作来实现。 假设int a = 1; int b = a;这样的是赋值操作 b 的值被福成了a的值,a和b是独立的变量 但 int a = 1; int *p = &a;这样的话&a 和 p指向通一个内存,那么a的值 发生变化的时候 *p也会发生变化,这就起到了引转载 2014-04-03 17:20:58 · 896 阅读 · 0 评论 -
客户端测试程序
char g_write_buff[MAX_PACKET_SIZE] = {0};char g_read_buff[MAX_PACKET_SIZE] = {0};int g_write_len = 0;int g_read_offset = 0;static MyHandler s_handler;SOCKET my_sockfd;void Enco原创 2014-03-07 18:33:19 · 646 阅读 · 0 评论 -
限定字符串的最大字节数
if(CStringA(m_str).GetLength()>512)return;原创 2014-03-17 17:58:49 · 885 阅读 · 0 评论 -
#ifdef,#else,#endif,#if用法详解
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。关于预处理命令中的文件包含(#i nclude),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。转载 2014-01-22 10:31:02 · 3085 阅读 · 1 评论 -
GetKeyState和GetAsyncKeyState的区别
简单的说。GetAsyncKeyState就是检查在调用该函数时,某一key的状态。而GetKeyState是检查window message发生时,某一key的状态。举例说明如下:1. GetAsyncKeyState// 检查是否Ctrl和tab键同时按下,使用GetAsyncKeyStatevoid CheckKeyState1(MSG* pM转载 2014-01-20 14:58:13 · 3283 阅读 · 0 评论 -
安装VS2005和DX SDK JUNE 2010 及配置
1、安装VS20052、安装DX SDK JUNE 2010 3、VS2005菜单“工具”-》“选项”-》“项目和解决方案”-》“VC++目录”,选择“包含文件”,“新行”,输入$DX SDK路径\include;选择“库文件”,“新行”,输入$DX SDK路径\lib\x86.原创 2013-12-09 18:34:06 · 1090 阅读 · 0 评论 -
Socket UDP编程
UDP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();3、绑定IP地址、端口等信息到socket上,用函数bind();4、循环接收发送数据,用函数recvfrom()、sendto();5、关闭网络连接; UDP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2、设置对方的IP地址和端口等属性;3、转载 2013-11-07 15:51:03 · 1048 阅读 · 0 评论 -
TCP/IP和Socket的关系
要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,转载 2013-11-07 15:35:30 · 841 阅读 · 0 评论 -
安装VS2003时IIS下面缺少FrontPage2000服务器扩展的解决办法
安装VS2003时IIS下面缺少FrontPage2000服务器扩展的解决办法 IIS安装完后,一直没找到如何安装Frontpage扩展,导致ASP.net无法使用,通过修改inf文件来完成。方法如下:1:打开c:\\Windows\inf\sysoc.inf文件,2:在 ims=imsinsnt.dll,OcEntry,ims.inf,,7 的下一行添加转载 2013-11-19 11:37:25 · 1968 阅读 · 0 评论 -
C++笔试题
1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的转载 2013-11-04 21:34:03 · 155 阅读 · 0 评论 -
安装和配置VS.NET 2003和SQL SERVER 2005
1、首先安装IIS。工具/原料环境:windows xp步骤/方法1先在百度找到IIS 6.0,然后下载下来,当然其它的版本也可以,我这个是为了凑合系统。 2下载完成后,解压(解压的跻身最好是自己记得住的就OK) 3然后点击开始调出控制面板,选择添加或删除原创 2013-11-19 10:32:41 · 1793 阅读 · 0 评论 -
sockaddr_in , sockaddr , in_addr区别
基本结构 在windows/linux下有下面结构: sockaddr结构 struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol转载 2013-11-03 18:56:11 · 1385 阅读 · 0 评论 -
判断SOCKET是否连接
#include bool IsConnectedByKeepAlive(SOCKET s) { BOOL bKeepAlive = TRUE; int nRet = setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE,(char*)&bKeepAlive, sizeof(bKeepAlive原创 2014-02-25 15:01:14 · 2782 阅读 · 0 评论 -
tcp ip 通信socket
摘要:基于tcp/ip的网络通信技术实现了面向连接的用户与服务器间点对点异步通信,本文在该基础上应用了多线程以及共享数据结构技术,使网络服务器具有了多用户间数据转发的功能,进而解决了局域网多用户间的通信问题。关键词:tcp/ip;多线程;共享;通信;网络引言由于因特网的迅速流行,越来越多的应用程序具备了在网上与其它程序通信的能力。从win95开始微软把网络功能融进了它的操作系统,使得应用程...转载 2014-03-18 10:53:57 · 739 阅读 · 0 评论 -
MFC 编辑框 限制数字输入
重写虚函数PreTranslateMessage。BOOL CClassDlg::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类//屏蔽小数输入框输入其他字符if(pMsg->message == WM_CHAR){ //IDC_UPPER_LIMIT和IDC_LOWER_LIMIT为编辑框IDCEdi原创 2014-03-17 18:20:50 · 3608 阅读 · 0 评论 -
CreateEvent 创建和使用一个命名的事件对象
1、 HANDLE m_exitThreadEvent = CreateEvent(NULL,FALSE,FALSE,NULL); //创建通讯线程退出事件句柄,第三个参数为FALSE表示初始时无信号2、ResetEvent(m_exitThreadEvent );原创 2014-02-24 15:37:59 · 2882 阅读 · 0 评论 -
MFC listCtrl选中某一项,LIST失去焦点时,该项仍然显示高亮
//消息映射ON_NOTIFY_REFLECT(NM_CUSTIOMDRAW,OnCUstomDraw)void CAppDlg::OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult ){NMLVCUSTOMDRAW* pLVCD = reinterpret_cast( pNMHDR ); switch(pLV原创 2014-03-13 17:31:40 · 6600 阅读 · 0 评论 -
将用逗号隔开的字符串存入MAP里
mapCstringToIntMap(CString strSource){mapserverIDMap;if(strSource.IsEmpty())return serverIDMap;int nFind = -1,nIndex = 0;nFind = strSource.Find(',');if(nFindserverIDMap[atoi(strSourc原创 2014-03-17 17:23:42 · 4356 阅读 · 0 评论 -
弹出对话框并切换焦点
pWnd1->ShowWindow(SW_HIDE)CDlg2 *dlg = new CDlg2(pWnd1);dlg->pLoginDlg = (CLoginDlg*)pWnd1;dlg->Create(IDD);dlg->ShowWindow(SW_SHOW);dlg->EnableWindow(true);dlg->SetFocus();原创 2014-03-10 10:43:24 · 1311 阅读 · 0 评论 -
CDateTimeCtrl CTime COleDateTime CString 日期时间
控件变量:CDateTimeCtrl m_BeginTime,CDateTimeCtrl m_EndTime;m_BeginTime.SetFormat("yyyy-MM-dd HH:mm:ss");m_EndTime.SetFormat("yyyy-MM-dd HH:mm:ss");//从CDateTimeCtrl、CTime、COleDateTime得到字符串原创 2014-04-01 14:36:42 · 2629 阅读 · 0 评论 -
单击listCtrl消息函数
映射NM_CLICK消息void CAppDlg::OnNMClickList(NMHDR *pNMHDR,LRESULT *pResult){int temp = m_list.GetItemCount();int m_nIndex;m_nIndex = m_list.GetSelectionMark(); //当前选择的行if(原创 2014-03-13 18:06:10 · 1793 阅读 · 0 评论 -
单击列表中某一项,判断其状态
映射NM_CLICK消息,int nUpdateNoticeID =0;int nNoticeListIndex = -1;bool bIsAbleGetFocus = true;void CClassDlg::OnNMClickListNotice(NMHDR *pNMHDR,LRESULT *pResult){int temp = m_list.GetItemC原创 2014-03-17 12:03:31 · 746 阅读 · 0 评论 -
日期控件的使用
控件变量:CDateTimeCtrl m_BeginTime,CDateTimeCtrl m_EndTime;m_BeginTime.SetFormat("yyyy-MM-dd HH:mm:ss");m_EndTime.SetFormat("yyyy-MM-dd HH:mm:ss");//得到字符串时间CTime ctBeginTime,ctEndTime;原创 2014-03-13 18:23:22 · 322 阅读 · 0 评论