
VC
文章平均质量分 87
flymachine
这个作者很懒,什么都没留下…
展开
-
请教:多线程同时写socket是否需要加锁
第一种可以,因为Socket是双工的多线程读写同一Socket的话基本上是会出问题的想要不出问题的话,除非你的多个线程作用是一样的在TCP/TP卷2中有这样的结构体struct sockbuf{short sb_flags;..........}so_recv,so_snd;其中flag 有这几种标志:SB_LOC转载 2013-07-28 00:12:10 · 22254 阅读 · 0 评论 -
标准模版库
STL (标准模版库,Standard Template Library)和MFC相比,STL更加复杂和强大。STL有以下的一些优点:---可以方便容易地实现搜索数据或对数据排序等一系列的算法;---调试程序时更加安全和方便;---STL是跨平台的一些基础概念的定义模板(Template)——类(以及结构等各种数据类型和函数)的宏(macro)。正规名称叫范型(转载 2012-04-10 10:04:11 · 481 阅读 · 0 评论 -
std::vector介绍
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include vector属于std命名域的,因此需要通过命名限转载 2012-04-10 10:03:05 · 587 阅读 · 0 评论 -
CSocket socket相关方法 知识点
问题一:自己做了个自定义控件,在里面使用CSocket进行连接,对该控件进行调试的时候发送和接受都是好用的,但是当把控件嵌入到一个应用中时,发送OK,但是却接受不到东西实验证明,要把这个CSOCKT的创建及发送都放在应用的主线程中就是可以接受到数据了,这是问什么呢? 问题二:关于使用socket接口的tcp与udp连接:(文章末尾有实例代码)转载 2012-04-07 17:18:15 · 2722 阅读 · 0 评论 -
CAsyncSocket发广播包
1.#include 2.定义CAsyncSocket类的指针CAsyncSocket *pSocket;3.初始化Socketif (!AfxSocketInit()){ AfxMessageBox("Error");//IDP_SOCKETS_INIT_FAILED return FALSE;}4.初始化pSocketpSocket = new转载 2012-04-06 15:21:53 · 2103 阅读 · 0 评论 -
CListCtrl基本用法
CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。最近使用了这个控件,有心得总结如下: (Dialog模式)转载 2012-04-07 11:15:53 · 688 阅读 · 0 评论 -
一些VC的快捷键以及调试方法技巧
1.检测程序中的括号是否匹配 - u6 Q( Q$ I/ L! Y- ^* B把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号 . W* W- F" y0 I" L; |2.查看一个宏(或变量、函数)的宏定义 k6 q& w2 ~4 w2 w& S& o把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE转载 2012-03-13 11:10:25 · 621 阅读 · 0 评论 -
VC开发环境快捷键
ctrl+u 可将大写转换成小写 相反的操作是ctrl+shift+u按着alt用鼠标可以选种一列列ctrl + ‘(’或 ‘)’ 可以找匹配的括号ctrl + shift+‘(’或 ‘)’可以选中括号内的ctrl + F2可以设置临时书签F2可在书签间跳转按着ctrl + 方向 可以一个词一个词的跳Ctrl+]括号匹配匹配光标所在位置的括号,包括大、小、中括号F转载 2012-03-13 11:09:22 · 638 阅读 · 0 评论 -
MFC疑难注解:CAsyncSocket及CSocket
MFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的。以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的。故CAsyncSocket及CSocket事实上成为疑难,群众多敬而远之。余好事者也,不忍资源浪费,特为之注解。一、CAsyncSocket与CSocket的区别前者是异步通信,后者是同步通信;前者是非阻塞模式,后者是阻塞模式。另外,异步非阻转载 2012-03-27 20:18:04 · 920 阅读 · 0 评论 -
std:string学习
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………首先,为了在我们的程序中使用s转载 2012-04-09 18:05:25 · 515 阅读 · 0 评论 -
CString转char * ,string
CString 头文件#include string 头文件#include CString 转char *CString cstr;char *p = (LPSTR)(LPCTSTR)cstr;string 转 CStringCString.format(”%s”, string.c_str());char 转 CStringCString转载 2013-07-28 19:16:51 · 945 阅读 · 0 评论 -
Socket那些事——winsocket日记(1)
般来说 碰到的第一个结构体是 WSADATA [cpp] view plaincopy#define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 typedef struct WSAData { WORD转载 2013-07-28 10:32:41 · 1357 阅读 · 0 评论 -
AMR文件格式分析
目录1. 概述2. AMR编码方式3. AMR文件结构示范图4. AMR帧头格式分析5. 异常帧分析6. AMR帧读取算法7. 参考资料1. 概述现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而AMR文件格式是手机端普遍支持的音频文件格式。 AMR,全称是:Adaptive Multi转载 2013-07-27 16:38:54 · 967 阅读 · 0 评论 -
MD5算法的C++实现
1. IntroductionMD5算法是一种消息摘要算法(Message Digest Algorithm),此算法以任意长度的信息(message)作为输入进行计算,产生一个128-bit(16-byte)的指纹或报文摘要(fingerprint or message digest)。两个不同的message产生相同message digest的几率相当小,从一个给定的messag转载 2013-07-27 09:28:31 · 653 阅读 · 0 评论 -
socket10053
前几天初步解决了困扰许久的socket10053的问题。 现象如下:windows下开发多线程socket通信的系统(采用事件选择WSAEventSelect的方式),在高并发的情况下send及recv时经常出错(有时是收到错误码不为0的FD_CLOSE事件),错误码为10053。 解决过程:首先看了MSDN,对10053的解释是“软件主动放弃一个连转载 2013-07-30 23:03:45 · 1120 阅读 · 0 评论 -
socket error 10053,10054究竟是怎么引起的
贴2段能稳定重现10053的代码,下面是客户端:[cpp] view plaincopyWORD VersionRequested; WSADATA WsaData; VersionRequested = MAKEWORD(2, 2); if (WSAStartup(VersionRequested,转载 2013-07-30 23:17:55 · 1621 阅读 · 0 评论 -
利用双缓冲技术将位图像素数据写到DIB位图中并在指定的窗口显示(主要使用CreateDIBSection和BitBlt方法)
至于为什么要使用双缓冲技术,大家可以查阅相关的资料,这里我只提一点,就是解决屏幕刷新频繁导致闪烁的问题。下面是相关的代码实现:(这里我保存的DIB位图的大小为320*240,深度为24位)[cpp] view plaincopyprint?void SaveToBmpAndBlend(BYTE *buffer) {转载 2013-07-21 21:28:34 · 2008 阅读 · 0 评论 -
JPEG图像的解压缩操作
JPEG图像的解压缩操作JPEG图像的解压缩操作 解压缩操作过程1. 为JPEG对象分配空间并初始化2. 指定解压缩数据源3. 获取文件信息4. 为解压缩设定参数,包括图像大小,颜色空间5. 开始解压缩6. 取出数据7. 解压缩完毕8.转载 2013-07-21 18:09:36 · 1176 阅读 · 0 评论 -
FileZilla Server源码分析(1)
之所以有本系列的分析,是因为两点:FileZilla 是目前非常火爆的开源ftp项目,整个项目采用C++代码编写,代码紧凑可读性高,值得学习(缺陷是注释太少)。网络上已有的对该源码的分析基于的版本是0.9.18,分析比较粗略,无论是框架还是细节。这里仅仅是我个人对FileZilla Server源码0.9.34版本的分析,能力有限,不足和错误之处还希望大家不吝斧正。本片作为开篇转载 2012-03-27 17:32:13 · 9191 阅读 · 0 评论 -
FileZilla客户端实现分析
Content List:Source File ClassificationMain Framework of FileZilla ClientNetwork Implementation AnalysisGet Nuggets from MiscExplore FileZilla Client GUIKnowledge RepositorySummarizeReference转载 2012-03-27 20:11:36 · 3025 阅读 · 0 评论 -
VC解析XML--使用CMarkup类解析XML .
经过今天尝试MFC解析XML串,也算有了不少收获,总结一下。 我是使用的CMarkup类对XML进行操作。 CMarkup好象都是先从一个xml文件里面把内容读出来,再进行解析,搞得我恨不得要把我的CString写到xml文件里面再取出来了。 如果需要直接读取CString,可以直接用 CMark转载 2012-01-30 11:44:33 · 589 阅读 · 0 评论 -
CWnd
目录绘制窗口操作窗口子控件窗口定时器窗口消息的相关函数默认的消息处理函数 计算机网络 cwnd 又为计算机网络中拥塞窗口(congestion window)的简写。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口还可能小于拥塞窗口。 既然窗口操作是Windows编程的核心内容,那么窗口基类CWnd在MFC类结构转载 2012-01-30 19:02:37 · 704 阅读 · 0 评论 -
消息循环
Windows是以消息驱动的操作系统,Windows 消息提供了应用程序与应用程序以及应用程序与Windows系统之间进行通讯的手段。 Windows 中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相转载 2012-01-30 19:01:36 · 380 阅读 · 0 评论 -
CFrameWnd
CFrameWnd类往往用于创建应用程序的主窗口,因为它能很好地支持系统菜单和控制条(工具条、状态条等),为此定义了大量的成员函数和变量。在编写文档/视图结构的应用程序时,CFrameWnd作为主窗口管理视图和文档对象。视图对象和控制条都成为CFrameWnd的子窗口,它们分享客户区,其位置被CFrameWnd有效地排列。 CFrameWnd直接支持单文档界面(SDI),对于多文档界面(MDI),转载 2012-01-30 19:01:10 · 2285 阅读 · 0 评论 -
CSingleDocTemplate
词条简介 基类:CObject └CCmdTarget └CDocTemplate └CSingleDocTemplate CSingleDocTemplate类定义了一个文档模板用于实现单文档界面(SDI)。一个SDI应用程序使用主框架窗口来显示一个文档;一次只能打开一个文档。 一个文档模板定义了类的三个类型之间的关系: ·转载 2012-01-30 19:00:10 · 1452 阅读 · 0 评论 -
OnInitialUpdate
目录OnInitialUpdate概括OnCreate函数中写法如下OnInitialUpDate中写法OnInitialUpdate概括 视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。 时间上,两者先后转载 2012-01-30 18:59:45 · 551 阅读 · 0 评论 -
AfxGetApp
目录基本概述AfxGetApp 解剖基本概述 函数原型: CWinApp* AFXAPI AfxGetApp( ); 返回值: A pointer to the single CWinAppobject for the application. 返回指向应用程序的单一的CWinApp对象的指针。 注意:转载 2012-01-30 18:58:29 · 498 阅读 · 0 评论 -
#pragma pack
目录一、n字节的对齐方式二、#pragma pack(n) 对齐用法详解一、n字节的对齐方式 VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。 VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两转载 2012-01-30 18:57:19 · 362 阅读 · 0 评论 -
MFC中CMainFrame类CDoc类CView类CApp类之间关系
用APPWIZARD这个工具声称的应用程序架构包括了应用程序基本的四个类,分别是:CApp,CMainFrame,CDoc,CView。其中 CApp负责整个应用程序的管理,CDOC类中有一个CAPP的指针,也可以认为应用程序是从CApp开始执行的。CMainFrame是主窗口框架CDoc是应用程序数据来源(文档)主要是用来管理数据,提供保存和加载数据的功能。有关文件的读写操作在C转载 2012-01-30 14:38:10 · 913 阅读 · 0 评论 -
XML class for processing and building simple XML documents
IntroductionOften times you don't want to invest in learning a complex XML tool to implement a little bit of XML processing in your application.Its SO Easy! Just add Markup.cpp and Markup.h to y转载 2012-01-30 14:40:24 · 675 阅读 · 0 评论 -
CAsyncSocket运作流程
使用CAsyncSocket时,Send流程和Recieve流程是不同的,不理解这一点就不可能顺利使用CAsyncSocket。编辑摘要目录1 概述2 相关 CAsyncSocket运作流程 - 概述MSDN对CAsyncSocket的解释很容易让你理解为:只有OnSend被触发时你Send才有意义,你才应该S转载 2012-03-27 21:46:53 · 781 阅读 · 0 评论 -
CAsyncSocket的用法
这几天都在研么MFC的套接字类CAsyncSocket的用法, 将一些心得和实践中遇到的问题总结一下。 一、 一些网络的基本概念1. 同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。2. 异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。3. 阻塞:指调用某函数时,直到该函数完转载 2012-03-27 20:53:47 · 1028 阅读 · 0 评论 -
FileZilla FTP服务器源代码分析
FileZilla是开源的FTP服务器,用C++写的,通过分析它的源代码,可以掌握C++网络编程以及高并发服务器的设计。FileZilla 是http://sourceforge.net上的项 目,主页是http://sourceforge.net/projects/filezilla, 我们要研究的版本是:FileZilla Server 0_9_18,其实FileZilla还包括客户端转载 2012-03-27 18:19:15 · 12331 阅读 · 0 评论 -
MFC程序得到本身路径
在开发工程中,往往需要知道当前程序本身所在目录。一种方法是在程序安装的时候利用安装程序把文件路径写入注册表。在较大的程序中,这种方法比较常用另一种,就是在程序得到路径。这样,程序随便移动到哪里,都可以得到正确的路径。这也是本文介绍的方法。方法一:[code]//得到帮助文件的路径CString strFullName = AfxGetApp()->m_pszHelpFile转载 2012-02-07 17:20:30 · 622 阅读 · 0 评论 -
CAsyncSocket使用总结
一、 一些网络的基本概念1. 同步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式;2. 异步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式3. 阻塞:指调用某函数时,直到该函数完成操作,才返回;否则一直阻塞在该调用上4. 非阻塞:指调用某操作时,不管操作是否成功都立即返回,而不会挂在该操作上CAsyncSocket属于异步非阻塞类;转载 2012-02-07 17:37:45 · 766 阅读 · 0 评论 -
WSAAsyncSelect()
目录简述:注释:事件 重新通知函数错误代码:简述: 通知套接字端口有请求事件发生. #include int PASCAL FAR WSAAsyncSelect ( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent ); s 标识一个需要事件通知的套接口的描述符转载 2012-02-02 15:17:04 · 618 阅读 · 0 评论 -
c_str
c_str c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化,下面就是这一转化过程。 c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。与C语言的其他部分一样,它在c++的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。 标准头文件包含操作c-串的转载 2012-02-02 19:55:14 · 494 阅读 · 0 评论 -
VC中的几个函数
1.class CXRunDbDicWnd : public CDialog{};CXRunDbDicWnd* m_pDbDicWnd;m_pDbDicWnd->ShowWindowEx(); 2. BOOL CXRunWnd::OnInitDialog() { CenterWindow();} 3. MoveWindow 4.原创 2012-02-02 09:46:07 · 457 阅读 · 0 评论 -
MFC 程序入口和执行流程
一 MFC程序执行过程剖析1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数。而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个冲CWinApp类派生而来的类的全局对象。CWinApp类被称之为应用程转载 2012-01-30 18:15:19 · 559 阅读 · 0 评论