博文

转利用MFC的Csocket类实现网络通信(2008-08-20 21:21:00)

摘要:近年来,利用Internet进行网际间通讯,在WWW浏 览、FTP、Gopher这些常规服务,以及在网络电话、多媒体会议等这些对实时性要求严格 的应用中成为研究的热点,而且已经是必需的了。Windows环境下进行通讯程序设计的最基本方法是应用Windows Sockets实现进程间的通讯,为此微软提供了大量基于Windows Sockets的通讯API,如WinSockAPI、WinInetAPI和ISAPI,并一直致力于开发更快、 更容易的通讯API,将其和MFC集成在一起以使通讯编程越来越容易。本实例重点介绍使用MFC的CSocket类编写网络通讯程序的方法,并通过使用CSocket类实现了网络聊天程序。程序编译运行后的界面效果如图一所示:


图一、网络聊天程序界面效果图
  一、实现方法

  微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSock API,为高级网络程序员 提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。为了给程序员提供更方便的接口以自动处理这些任务,MFC给出 了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSock API接口。Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo() 和Accept())直到操作完成后才返回控制权,因此如果需要低层控制和高效率,就使用CasyncSock类;如果需要方便,则可使用Csocket类。

  一些网络应用程序(如网络电话、多媒体会议工具)对实时性要求非常强,要求能够直接应用WinSock发送和接收数据。为了充分利用MFC 的优势,首选方案应当是MFC中的CAsyncSocket类或CSocket类,这两个类......

阅读全文(3632) | 评论:0

VC怪异之处(2008-08-13 00:19:00)

摘要:
                                        一直觉得C++ 不用像C那样把变量都写在程序的开始而感觉很高兴。而且有很多资料书上也说,C++中的局部变量也可以写到循环体内,如for(int i = 0 ;i<Max;i++)   //  循环结束变量i 自动消失,这很爽啊。{}所以可以写出这样的程序。for(int i = 0 ;i<Max;i++){}for(int i = 0 ;i<Max;i++){}   // 上面的循环的 i  不会影响到本次循环的 i  可实际上在VC6 ,和VC.NET  中这样的程序是通不过的。   看个例子:void CWorkLxDlg::OnLocal()
{ for(int i = 0;i<10 ;i++)
 {
  int k = 5;
 }
 int m = 0; for(int j = 0 ;j <10;j++)
 {
  m = 5;
 } int p = i ;      // 此时 i 仍然没有消失。仍然有效    }0012F588  0A 00 00 00  ....  0A就是变量 p 在内存中的值
0012F58C  0A 00 00 00  ....
0012F590  05 00 00 00  ....
0012......

阅读全文(2608) | 评论:2

转RS485通讯协议(2008-08-12 07:48:00)

摘要:首先要知道什么是RS232和RS485. 典型的串行通讯标准是RS232和RS485.它们定义了电压,阻抗等.但不对软件协议给予定义区别于RS232, RS485的特性包括: 1. RS-485的电气特性:逻辑“1”以两线间的电压差为+(2—6) V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。接口信号电平比RS -232-C降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL 电路连接。 2. RS-485的数据最高传输速率为10Mbps 3. RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。 4. RS-485接口的最大传输距离标准值为4000英尺,实际上可达 3000米,另外RS-232-C接口在总线上只允许连接1个收发器,即单站能力。而 RS-485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。因RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。因为RS485接口组成的半双工网络,一般只需二根连线,所以RS485接口均采用屏蔽双绞线传输。 RS485接口连接器采用DB-9的9芯插头座,与智能终端RS485接口采用DB-9(孔) ,与键盘连接的键盘接口RS485采用DB-9(针)。 RS485编程串口协议只是定义了传输的电压,阻抗等,编程方式和普通的串口编程一样!! RS-232与RS-422之间转换原理和接法 通常我们对于视频服务器、录像机、切换台等直接播出、切换控制主要使用串口进行,主要使用到RS-232、RS-422与RS-485三种接口控制。下面就串口的接口标准以及使用和外部插件和电缆进行探讨。 RS -232、RS-422与RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。例如:视频服务器都带有多个RS422串行通讯接口,每个接口均可通过RS422通讯线由外部计算机控制实现记录与播放。视频服务器除提供各种控制硬件接口外,还提供协议接口,如RS422接口除支持RS422的Profile协议外,还支持 Louth、Odetics 、BVW等通过RS422控制的协议。 RS-232、RS-422与RS-48......

阅读全文(9039) | 评论:4

转基于RS485总线的串口令牌环通信的研究(2008-08-11 23:33:00)

摘要:摘要:针对串口RS232和RS485总线在工业实时控制检测系统中的广泛应用,本文介绍并分析了串口通信网络的典型拓扑结构及其特点和具体使用问题。根据串口通信在实时控制监测系统中的特点,借鉴令牌总线思想和TCP/IP协议的控制方法,研究设计了一种适用于中小型分布式实时控制检测系统的串口令牌环网络通信协议,阐述了该协议的完整工作过程。最后,总结分析了该协议的应用范围和应用扩展性问题。 关键词:RS485总线;令牌总线;串口环;数据采集 1        引言 在数据通信、计算机网络以及工业上的分布式控制检测系统中,经常采用串行通信来完成信息交换。这类系统要求用最少的信号线来完成通信任务,由于RS485具有性能优异、组网简单的优点,在集中控制系统、分布式控制系统中的应用相当广泛,特别是在要求远距离传输的应用中[1]。RS485总线通信需要一对信号线,最远的传输距离大约为1200米,如果加上中继器则通信传输距离还可以延长。由于RS485总线与RS232串口的电平信号不一致,计算机的RS232串口必须通过RS232/RS485转换接口芯片与RS485总线连接在一起。 典型的控制检测系统中通常有上位机和下位机,下位机常常由单片机或嵌入式芯片为核心的数据采集电路模块构成,而PC机通常当成上位机使用,它们之间通过RS232/RS485通信来完成数据通信传输和数据分析处理显示等应用。这种上位机和多台下位机构成的控制检测网络中,下位机采集到的数据最终传输到上位机,因此采集数据的有效控制和传输成为非常重要的问题。本文针对RS232/RS485串口通信构成的网络结构和通信方式进行了分析,并结合桥梁检测应用实例设计了一种基于RS485总线的串口令牌环网络通信协议。 2        串口通信网络拓扑结构 常用的拓扑结构有总线型和环型结构。这两种拓扑结构的一个共同特点是节点共用通信介质及使用广播式通信方式。[2] 2.1   总线型拓扑结构 总线型结构由RS485总线连接而成,其结构如图1所示,下位机由单片机或嵌入式芯片构成的多个分布式排列的智能测控设备组成,这些设备包括串口接口电路,所有的TXD端连接在RS485总线的同......

阅读全文(3985) | 评论:2

[接口总线]基于RS485总线的PC机与多单片机系统的串行通信(转)(2008-08-11 23:21:00)

摘要:基于RS485总线的PC机与多单片机系统的串行通信
林 颖,罗金炎,刘 骄,陈 忠,李伟光
(华南理工大学,广东广州510640)
SerialCommunicationBasedonRS485BusbetweenPCandMultisinglechipSystem
LINYing,LUOJinyan,LIUJiao,CHENZhong,LIWeiguang
(SouthChinaUniversityofTechnology,Guangzhou510640,China)
摘要:根据所开发的电子产品故障维修实验系统的要求,提出了一套基于RS485总线的PC机与多单片机系统间的串行通信协议,已成功应用于故障维修实验系统中"
关键词:RS485总线;多单片机;串行通信
中图分类号:TP336
文献标识码:A
文章编号:10012257(2006)01003304
收稿日期:20050902
基金项目:广东省科技攻关项目(2003C102017)
Abstract:Accordingtothefunctionalrequestofafaultmaintenanceexperimentsystemforelec2
tronicalproducts,putsforwardacommunicationprotocolwhichisdesignedforserialcommunica2
tionbasedonRS485busbetweenPCandmultisinglechipsystem.Thisprotocolhasbeenimple2
mentedintheaboveexperimentsystem.
Keywords:RS485bus;multisinglechip;serial communication
0 引言
笔者参与合作开发了一个电子产品故障维修实验系统"利用该实验系统,可以避免传统维修训练中必须进行实物拆装的缺陷"在这个实验系统应用过程中,首先,上位机可根据教学需要生成各种难度级别的实验题目并发送给进行实验的下位机,下位机通过LCD显示接收到的实验题目,并同步接收上位机根据实验题目生成的相应的嵌入式控制器的控制参数"然后,下位机根据接收到的控制参......

阅读全文(5848) | 评论:0

转VC++ 6.0实现视频捕捉(VFW)(2008-07-02 10:18:00)

摘要:VC++ 6.0实现视频捕捉(VFW) 一、Vedio for Windows 简介
Vedio for Windows 是WIN32 SDK 中多媒体编程SDK 的视频开发工具。在微软的Visual C ++中提供了Vedio for Windows 的头文件vfw.h 和库文件vfw32.lib。表1 列出了VFW 中视频捕捉编程常用的一些VFW 函数和宏。 二、用VC ++6.0 实现视频捕捉的编程实例
  下面结合实例,说明对视频捕捉编程的具体实现方法。
  1、用Visual C ++的AppWizard 生成一个基于对话框的应用程序,并在StdAfx.h 中加入以下内容:
        #include < vfw.h >
        #pragma comment(lib,"vfw32.lib")
  2、修改对话框资源,添加静态控制IDC_VIDEO 和按钮“捕捉”、“停止”、“设置格式”、“设置图像源”、“设置压缩”、“单帧捕获”、“定帧”、“退出”。 (其实最重要的是“设置格式”、“设置图像源”、“设置压缩”、“单帧捕获”、“退出”,其它可以将其设置成不可见,同时也可将其保留,以便将来扩展其功能时可用。)
  3、在对话框的头文件中加入以下说明。
   HWND m_hCapWnd;// 预示窗口
   BOOL m_bInit;// 捕捉器初始化
   CAPDRIVERCAPS m_CapDrvCap;// CAPDRIVERCAPS 结构,定义驱动器性能
   CAPSTATUS m_CapStatus;// CAPSTATUS 结构,定义捕捉窗口当前状态
   CAPTUREPARMS m_Parms;// CAPTURE PARMS 结构,定义捕捉参数
   CString m_CapFileName;// 捕捉文件名称
  4、在对话框类的OnInitDialog() 函数中加入捕捉器初始化以及连接驱动器。
       m_bInit=FALSE;
       CWnd *pWnd=AfxGetMain......

阅读全文(8408) | 评论:2

INI文件的读写(2008-07-01 11:44:00)

摘要:void CWriteINI_expDlg::OnWrite()
{
 CString inifilepath = "c:\\test.ini";
 CString str;
 GetDlgItem(IDC_DATE)->GetWindowText(str);
 if(WritePrivateProfileString(_T("section"),_T("key"),str,inifilepath))
  MessageBox("Done");
}   WritePrivateProfileString(_T("section"),_T("key"),str,inifilepath) 这个函数 [section] key=(IDC_DATE的值)   void CWriteINI_expDlg::OnRead()
{
 CString inifilepath = "c:\\test.ini";
 CString str;
 int i=0;
 DWORD result = ::GetPrivateProfileInt(_T("section"),_T("key"),i,inifilepath);
 str.Format("%d",result);
 GetDlgItem(IDC_DATE)->SetWindowText(str);
 
}......

阅读全文(1794) | 评论:0

vc 对P2P的思考(2008-06-04 10:38:00)

摘要: vc 对P2P的思考A向服务器发送请求包,服务器端获取IP和端口号(IP应该是10.10.10.10)  
  B向服务器发送请求包,服务器端获取IP和端口号(IP应该是20.20.20.20)  
  服务器向A发送B的IP和端口,B监听  
  或者服务器向B发送A的IP和端口,A监听  
  然后A和B连接成功后开始会话

如果无公网IP
NAT机制直接把IP和端口屏蔽,
现在的NAT机制大部分是IP和端口对于多连接是不变的(一个内网访问多个外网其IP和端口转了后都是同一个,和半克隆的NAT不同,他会重新修改端口).
well,这样就是点对点通讯原理,喜欢的话去编写一个QQ吧......

阅读全文(3116) | 评论:0

转TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞(2008-04-11 16:27:00)

摘要:TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞

作者:谢红伟 下载源代码

这个标题用了两个顿号三个名称,其实说得是同一个东西,只是网上有不同的说法罢了,另外好像还有人叫TCP打孔(我的朋友小妞听说后问“要打孔啊,要不要我帮你去借个电钻过来啊?”“~!·¥%……·!”)。 闲话少说,我们先看一下技术背景:
Internet的迅速发展以及IPv4 地址数量的限制使得网络地址翻译(NAT,Network Address Trans2lation)设备得到广泛应用。NAT设备允许处于同一NAT后的多台主机共享一个公网(本文将处于同一NAT后的网络称为私网,处于NAT前的网络称为公网) IP 地址。一个私网IP 地址通过NAT设备与公网的其他主机通信。公网和私网IP地址域,如下图所示:

广域网与私网示意图

一般来说都是由私网内主机(例如上图中“电脑A-01”)主动发起连接,数据包经过NAT地址转换后送给公网上的服务器(例如上图中的“Server”),连接建立以后可双向传送数据,NAT设备允许私网内主机主动向公网内主机发送数据,但却禁止反方向的主动传递,但在一些特殊的场合需要不同私网内的主机进行互联(例如P2P软件、网络会议、视频传输等),TCP穿越NAT的问题必须解决。网上关于UDP穿越NAT的文章很多,而且还有配套源代码,但是我个人认为UDP数据虽然速度快,但是没有保障,而且NAT为UDP准备的临时端口号有生命周期的限制,使用起来不够方便,在需要保证传输质量的应用上TCP连接还是首选(例如:文件传输)。
网上也有不少关于TCP穿越NAT(即TCP打洞)的介绍文章,但不幸我还没找到相关的源代码可以参考,我利用空余时间写了一个可以实现TCP穿越NAT,让不同的私网内主机建立直接的TCP通信的源代码。 这里需要介绍一下NAT的类型:
NAT设备的类型对于TCP穿越NAT,有着十分重要的影响,根据端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone类型。
(1)全克隆( Full Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。
(2)限制性克隆(Restricted ......

阅读全文(3353) | 评论:0

ASP基础教程:ASP简介(2008-03-31 17:15:00)

摘要:看了《如何令你的网站“动感十足”》一文后,是否令你怦然心动?是否已经急不可待地想构建属于你自己的动态网站?本文将以 Active Server Pages 为中心,向你全面展示制作动态商业网站的步骤和技巧并通过大量的实例,让你在不断的理论和实践之中笑傲“网络”…… 上一章给大家简要介绍了建立动态网站的一些方法和制作工具,本章将以如何建立基于 IIS 的 ASP 动态网站为中心向大家一步一步地揭示动态商业网站设计的真正奥秘。为了使各位能够全面、细致地掌握 ASP 的开发技巧,本文今后将采取连载的形式,手把手地教你如何建立属于自己 ASP 动态网站。由于本文是作者根据自己的学习和实践经验并结合了一些外文资料而写成的,因此不免会有一些偏颇,希望各位见谅。如发现本文有何不当之处,请及时通知作者,谢谢。 Microsoft Active Server Pages 即我们所称的 ASP ,其实是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.0 和 4.0 之中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX 元件建立动态、交互且高效的 WEB 服务器应用程序。有了 ASP 你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通 HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。 以下罗列了 Active Server Pages 所独具的一些特点: 1. 使用 VBScript 、 JScript 等简单易懂的脚本语言,结合 HTML 代码,即可快速地完成网站的应用程序。 2. 无须 compile 编译,容易编写,可在服务器端直接执行。 3. 使用普通的文本编辑器,如 Windows 的记事本,即可进行编辑设计。 4. 与浏览器无关 (Browser Independence), 用户端只要使用可执行 HTML 码的浏览器,即可浏览 Active Server Pages 所设计的网页内容。 Active Server Pages 所使用的脚本语言 (VBScript 、 Jscript) 均在 WEB 服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。 5.Active Se......

阅读全文(1672) | 评论:0