- 博客(45)
- 收藏
- 关注
转载 WINSOCK 编程的简单过程
http://fring.bloghome.cn/posts/2111.html 为了方便网络编程,90年代初。。。由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即Windows Sockets规范,它不是一种网络协议, 而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Wins
2009-07-07 09:09:00 755
转载 典型的网络数据收发举例
摘要: 本文从解决实际需要出发,通过采用Windows Socket API等网络编程技术实现了在局域网共享一条电话线的情况下,当服务器拨号上网时能及时通知各客户端通过代理服务器进行上网。本文还特别给出了基于Microsoft Visual C++ 6.0的部分关键实现代码。 一、 问题提出的背景 笔者所使用的局域网拥有一个服务器及若干分布于各办公室的客户机,通过网卡相连。服务器不提供专线
2009-07-07 08:55:00 830
转载 一个包含详细注释的扫描器C源代码
#include #include #include #define iPort 80//目标Web Server端口 .#define szSign "500 13/r/nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞 #pragma comment(lib,"ws2_32.lib") ////////////////////////////////
2009-07-06 16:49:00 526
转载 学用VC++进行Winsock编程──Client端
说到Winsock,可能很多人还不太了解,但说到OICQ、ICQ、Foxmail、Netants、CuteFTP以及大名鼎鼎的BO2K等等,大家都应该是很熟悉的。如今是网络时代,这些基于网络的软件真的是红红火火!那你有没有想过这些软件是怎么写出来的呢?这就是本文将要介绍的内容:Socket编程!Socket(中文译名:套接字)最初在Unix上出现,并很快成为Unix上最流行的网络编程接口之一。后来
2009-07-06 16:47:00 865
转载 Socket的阻塞/非阻塞
WinSock基本知识 这里不打算系统地介绍socket或者WinSock的知识。首先介绍WinSock API函数,讲解阻塞/非阻塞的概念;然后介绍socket的使用。 WinSock API Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley接口,在Unxi操作系统中实现。WinSock也是一个基于Socket模
2009-07-06 16:42:00 714
转载 VSS使用入门(VSS使用指南 VSS使用说明 VSS使用手册 2.01版)
VSS(Visual SourceSafe)使用入门第二版(2.01)张博 2006.12.41 前言 22 概念 32.1 数据库SourceSafe Database 32.2 服务器和客户机 32.3 项目Project 32.4 工作目录Working Folder 42.5 签入、签出 42.6 基本工作方式 43 作业指导书 43.1 客户机作业指导书 43.1.1 准备工作 43
2009-07-01 22:47:00 1822 1
转载 VSS使用入门
节 1.01 前言... 2 节 1.02 安装... 2 节 1.03 数据库管理... 3 (a) 介绍... 3 (b) Visual SourceSafe 6.0 Admin程序... 3 (c) 打开指定的数据库... 4 (d) 创建新数据库... 5 (e) 用户管理... 5 (f) 使用项目权限Project Rights. 5 节 1.04 使用VSS浏览器... 7 (a)
2009-07-01 22:45:00 2000 1
转载 CreateThread、_beginthread 和 _beginthreadex
函数用途:建立一个线程。 函数说明:unsigned long _beginthread(void(cdecl *startaddress)(void*),unsigned stacksize, void *arglist);unsigne dlong _beginthreadex(void *security,unsignedstacksize,unsigned(stdcall *sta
2009-07-01 05:30:00 1446
转载 为何要用_beginthreadex()而非CreateThread?
当你打算实现一个多线程(非MFC)程序,你会选择一个单线程的CRT(C运行时库)吗?如果你的回答是NO, 那么会带来另外一个问题,你选择了CreateThread来创建一个线程吗? 大多数人也许会立刻回答YES。可是很不幸,这是错误的选择。我先来说一下我的结论,待会告诉你为什么。如果要作多线程(非MFC)程序,在主线程以外的任何线程内- 使用malloc(),free(),new- 调用s
2009-06-30 06:04:00 593
转载 beginthread beginthreadex CreateThread 区别
建立一个线程。unsigned long beginthread(void(cdecl *startaddress)(void*),unsigned stacksize, void *arglist);unsigne dlong beginthreadex(void *security,unsignedstacksize,unsigned(stdcall *startaddress) (void
2009-06-30 06:02:00 793
转载 _beginthread还是CreateThread
程序员对于Windows程序中应该用_beginthread还是CreateThread来创建线程,一直有所争论。本文将从对CRT源代码出发探讨这个问题。 I. 起因今天一个朋友问我程序中究竟应该使用_beginthread还是CreateThread,并且告诉我如果使用不当可能会有内存泄漏。其实我过去对这个问题也是一知半解,为了对朋友负责,专门翻阅了一下VC的运行库(CRT)源代码,
2009-06-30 05:58:00 145
转载 CreateThread()、_beginthread()以及_beginthreadex()联系与区别
联系:CreateThread、_beginthread和_beginthreadex都是用来启动线程的。区别:_beginthread是_beginthreadex的功能子集,_beginthreadex是微软的C/C++运行时库函数,CreateThread是操作系统的函数。虽然_beginthread内部是调用_beginthreadex但他屏蔽了象安全特性这样的功能,所以_be
2009-06-30 05:56:00 180
转载 关于 getaddrinfo 函数
gethostbyname和gethostbyaddr这两个函数仅仅支持IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个sockaddr结构的链表而不是一个地址清单。这些sockaddr结构随后可由套接口函数直接使用。如此以来,getaddrinfo函数把协议相关性安全隐藏在这个库函数内部。应用程序只要处理由getaddrinfo函数填写的套接口
2009-06-15 06:26:00 562
转载 IPv6名称到地址的转换函数getaddrinfo()详解
转自 http://desktop.chinaitlab.com/VC/27753.html IPv4中使用gethostbyname()函数完成主机名到地址解析,但是该API不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。为了解决该问题,IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6
2009-06-15 05:53:00 1142
转载 WinSock send函数和recv函数详解
send函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指
2009-06-14 05:13:00 730
转载 va_list是一个宏,由va_start和va_end界定,一时难说清,详细见《Windows32程序设计》Unicode部分
va_list是一个宏,由va_start和va_end界定,一时难说清,详细见《Windows32程序设计》Unicode部分va_list structure Used to hold information needed by va_arg and va_end macros. Called function declare
2009-06-12 06:38:00 7605 4
转载 对C/C++可变参数表的深层探索
http://dev.yesky.com/424/2110924.shtml 引言 C/C++语言有一个不同于其它语言的特性,即其支持可变参数,典型的函数如printf、scanf等可以接受数量不定的参数。如:printf ( "I love you" ); printf ( "%d", a );printf ( "%d,%d", a, b ); 第一
2009-06-12 06:32:00 598
转载 可变长度参数 char frm,... char frm...
函数名: vfprintf 功 能: 送格式化输出到一流中 用 法: int vfprintf(FILE *stream, char *format, va_list param); 程序例: #include #include #include FILE *fp; int vfpf(char *fmt, ...) { va_list argptr; int cn
2009-06-12 06:31:00 775
转载 C中的可变参数研究
一. 何谓可变参数 int printf( const char* format, ...); 这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用”…”表示). 而我们又可以用各种方式来调用printf,如: printf("%d",value); print
2009-06-12 06:31:00 407
转载 动态的调用可变参数函数
动态的调用可变参数函数 作者: 来源:http://blog.csdn.net/yhz 最近,碰到了一个奇怪的问题:如何在函数中动态的调用可变参数函数。例如说,有某个可变参数函数:void Func1(int a, ...) { ... }现在给出一个个数不定的动态数组,把里面的数值按顺序的作为可变参数传递进 Func1 函数中。当然,如果允许改变 Func1 的定义
2009-06-12 06:30:00 689 1
转载 用可变参数宏(variadic macros)传递可变参数表
你可能很熟悉在函数中使用可变参数表,如: void printf(const char* format, …);直到最近,可变参数表还是只能应用在真正的函数中,不能使用在宏中。C99编译器标准终于改变了这种局面,它允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏。可变参数宏就像下面这个样子:#define debug(…) prin
2009-06-12 06:29:00 499
转载 va_list、va_start、va_arg、va_end的原理与使用
概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论. 定义大家先看几个宏.在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n) ((sizeof(n)+siz
2009-06-11 22:16:00 512
原创 关于WINDOWS服务程序的编写-------------一个适合我的BLOG专栏
一个适合我的BLOG专栏 关于WINDOWS服务程序的编写 用C语言编写Windows服务程序的五个步骤 Windows服务编写原理及探讨(一) Windows服务编写原理及探讨(二) Windows服务编写原理及探讨(三) Windows服务编写原理及探讨(四) Creating a Simple Win32 Serv
2009-06-02 22:42:00 560
转载 模式对话框与非模式对话框的区别
模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口.例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗口,现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。
2009-05-29 11:26:00 6779 1
转载 系统处理非模态对话框和模态对话框的区别
非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别 先看一下MSDN的原文: When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from w
2009-05-29 11:20:00 1895
原创 理解MFC中的“资源”概念
Visual C++ 支持十种资源:加速键、位图、光标、对话框、HTML、图标、菜单、串表、工具条和版本信息。 各种资源就是堆数据而已,最终都会被嵌入到EXE文件里的数据区中。需要的时候就通过函数加载到内存中使用。和数据库一样的。各种资源通过ID来唯一确定,就像数据库用关键字来确定一样。不同的资源由于类型不一样可以使用等值的ID,如同数据库里的
2009-05-27 23:48:00 605
转载 c++ using namespace 详解
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一 :和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀
2009-05-27 23:48:00 476
原创 const用法详解
面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法 2. 必须初始化 const int i
2009-05-27 23:46:00 316
转载 理解VC的类的“串行化”概念
串行化是微软提供的用于对对象进行文件I/O的一种机制,该机制在框架(Frame)/文档(Document)/视图(View) 模式中得到了很好的应用。很多人对什么是串行化、怎么使对象具有串行化能力和如何使用串行化功能等问题都不甚明了。本文试图对串行化做一个简单的解释。由于本人对串行化功能使用的也不多,不足之处敬请谅解。 MFC 框架/文档/视图结构中的文件读写CFile是MFC
2009-05-27 23:46:00 644
转载 c++中的引用与指针的区别
★ 相同点:1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终” ^_^4. 引用没有 const,指针有 const,const 的指针不可变;5. 引用不能为空,指针可以为空
2009-05-27 23:45:00 398
转载 c/c++中内存区域划分大总结
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放
2009-05-27 23:40:00 409
转载 Visual C++ MFC 中常用宏的含义
ASSERT ASSERT(booleanExpression) 说明: 计算变量的值。如果结构的值为0,那么此宏便打印一个诊断消息并且成讯运行失败。如果条件为非0,那么什么也不做。 诊断消息的形式为: assertion failed in file in line 其中name是元文件名,num是源文件中运行失败的中断号。 在Release版中,ASSERT不计算表达式的值也就不中断程序
2009-05-27 23:34:00 371
转载 谈谈父窗口和所有者窗口
一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。 所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-
2009-05-27 23:23:00 541
原创 MFC应用程序中处理消息的顺序 MFC应用程序创建窗口的过程 关闭窗口的顺序(非模态窗口) ..................
MFC应用程序中处理消息的顺序1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序 以后使用,然后调用WindowProc()函数 3.WindowProc() 该函数负责发送消息到OnWndM
2009-05-27 23:20:00 879
转载 项目优化必须做的几件事
因为我手上的项目的功能基本完成,加上正在阅读《Effective C++》,所以在自己的项目中实践一些优化的细则。可能不是很全面和准确,确实我第一份工程项目的详细代码优化心得。 2. 找出项目出现的所有计时器ID值,以前都是自己手写的数字。现在全部定义为全局常量。根据《Effectve C++》的优化规则,项目中尽量少用#define,,所以少用宏定义。 对策:定义这些值到Global
2009-05-27 23:14:00 505
转载 通用结构复制函数
作者:余四清 在C/C++语言中,将一个组合数据类型如结构各个字段的值复制到另一个相同类型的结构中,可以将其对应字段赋值。这种方法对于各种复杂的结构如多字段结构、嵌套结构,就要写很多行赋值语句,而且如果原来的结构定义更改,程序代码就要随着更改,使用很不方便。本文给出了一个通用的结构复制函数。 假定结构的类型为STRUCT_TYPE。为了提高效率,用指针引入两个结构到
2009-05-27 00:17:00 542
原创 变量的复制
简单的变量,如整型等,可直接用 = 赋值。 对复杂的变量,如字符串,可用函数: char*strcpy(char*s1,char*s2); 结构体变量,可用函数 void *memcpy( void *dest, const void *src, size_t count ); 注意在使用前,要对目标变量分配内存。 还可借鉴: 通用结构复制函数
2009-05-27 00:07:00 536
原创 对话框控件访问的七种方式
GetDlgItem()->Get(Set)WindowText() GetDlgItemText() / SetDlgItemText() GetDlgItemInt() / SetDlgItemInt() 将控件和整形变量相关联,UpdateData(true / false) 将控件和控件变量相关联 SendMessage() EM_GET
2009-05-26 15:25:00 453
转载 PreTranslateMessage作用和使用方法
PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码. MFC 消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可以作一个全新的控
2009-05-26 07:07:00 1128 1
原创 如何控制 VC 中控件间的TAB切换顺序
方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|WS_VISIBLE|WS_TABSTOP,其中WS_TABSTOP 是影响TAB顺序的。先创建的控件TAB顺序在前。如果要颠倒TAB顺序的话,就把在创建控件时把WS_TABSTOP去掉,并增加对“TAB键被按下”事件的捕捉,人工使用SETFOCUS来控制TAB顺序。 方法二:在VC中,首先控件没有TABINDEX
2009-05-25 23:19:00 3005
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人