(通信企业管理)进程通信调试实验精编

上传人:初**** 文档编号:139720955 上传时间:2020-07-23 格式:DOC 页数:10 大小:982.54KB
返回 下载 相关 举报
(通信企业管理)进程通信调试实验精编_第1页
第1页 / 共10页
(通信企业管理)进程通信调试实验精编_第2页
第2页 / 共10页
(通信企业管理)进程通信调试实验精编_第3页
第3页 / 共10页
(通信企业管理)进程通信调试实验精编_第4页
第4页 / 共10页
(通信企业管理)进程通信调试实验精编_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《(通信企业管理)进程通信调试实验精编》由会员分享,可在线阅读,更多相关《(通信企业管理)进程通信调试实验精编(10页珍藏版)》请在金锄头文库上搜索。

1、(通信企业管理)进程通信调试实验实验四进程通信调试实验实验目的1、掌握WinCE5.0下进程间通信机制;2、掌握通过对消息传递和共享内存的实现进程间通信的方法;3、了解实现进程通信的编程方法实验仪器1、装有PlatformBuilder、EVC和VS.Net开发平台的PC机壹台2、XSBase270实验开发平台壹套实验原理1、软件原理:于项目开发和系统集成中,进程间通信的应用非常广泛,进程间的通信有以下几种实现方法:利用Windows消息(WM_COPYDATA)、全局原子、内存映射、命名管道以及邮曹。下面介绍利用WM_COPYDATA和内存映射实现进程通信的方法。1.1WM_COPYDATA

2、方法使用WM_COPYDATA消息能够很方便地传递进程间的数据,具体定义如下:SendMessage(hwnd,WM_COPYDATA,wParam,lParam);其中wParam设置为包含数据的窗体的句柄,lParam指向壹个COPYDATASTRUCT的结构:typedefstructtagCOPYDATASTRUCTDWORDdwData;/用户定义数据DWORDcbData;/数据大小PVOIDlpData;/指向数据的指针COPYDATASTRUCT也就是通过COPYDATASTRUCT的结构来传递数据。需要注意的是,WinCE提供的WM_COPYDATA消息来传递进程间的数据,且

3、没有提供同步机制,所以必须要使用SendMessage函数来发送消息,且等待直到对方处理完后返回,而不能使用PostMessage函数来发送WM_COPYDATA。1.2内存映射文件的方法内存映射文件提供了壹种完全不同的读写文件的方法,它是将文件内容映射到内存的某个区域,读写文件直接操作内存即可。下面介绍内存映射文件所需的API函数:(1)创建用于内存映射访问的文件于WinCE中,要想创建或打开壹个用于内存映射访问的文件,需要通过CreateFileForMapping函数来实现,它是CreateFile函数的壹个特殊版本,专门提供给内存映射文件使用,CreateFileForMapping函

4、数的定义如下:HANDLECreateFileForMapping(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);(2)创建或打开内存映射文件对象于使用内存映射文件时,需要创建或打开内存映射文件对象,它实际上是于已经创建或打开的文件建立连接。创建或打开内存映射对象通过CreateFileMapping

5、函数实现,此函数定义如下:HANDLECreateFileMapping(HANDLEhFile,LPSECURITY_ATTRIBUTESlpFileMappingAttributes,DWORDflProtect,DWORDdwMaximumSizeHigh,DWORDdwMaximumSizeLow,LPCTSTRlpName);成功创建内存映射文件对象,函数将返回壹个内存映像对象句柄,如果于创建内存映射文件对象已存于,将直接返回已打开的内存映像文件对象句柄。(3)获取内存映像文件对象视图当创建或打开了内存映射对象之后。接着就需要得到内存映射文件对象的数据内存指针,通过此指针则能够读写文

6、件中的内容,也就是获取内存映射文件对象视图。得到内存映射文件对象的数据内存指针通过MapViewOfFile函数实现,此函数定义如下:LPVOIDMapViewOfFile(HANDLEhFileMappingObject,DWORDdwDesiredAccess,DWORDdwFileOffsetHigh,DWORDdwFileOffsetLow,DWORDdwNumberOfBytesToMap);函数返回值指向映射文件的内存指针。(4)取消文件视图的映射于使用完内存映射文件之后,仍要调用UnmapViewOfFile函数取消文件视图,进行内存清理工作。此函数定义如下:BOOLUnmapV

7、iewOfFile(LPCVOIDlpBaseAddress);2、进程通信的实现2.1WM_COPYDATA方法Client端的实现voidCClientDlg:OnBnClickedbtnsendmessage()CStringstr=_T(Server);CWnd*pWnd=CWnd:FindWindow(NULL,str);UpdateData(TRUE);if(pWnd&m_msg!=_T()COPYDATASTRUCTbuf;buf.lpData=m_msg.GetBuffer(m_msg.GetLength();buf.cbData=m_msg.GetLength()*2;pWn

8、d-SendMessage(WM_COPYDATA,0,LPARAM(&buf);elseMessageBox(_T(NosuchMessage);Server端的实现方法:BOOLCServerDlg:OnCopyData(CWnd*pWnd,COPYDATASTRUCT*pCopyDataStruct)m_RecvData=LPCTSTR(pCopyDataStruct-lpData);UpdateData(FALSE);returnCDialog:OnCopyData(pWnd,pCopyDataStruct);2.2内存映射方法Client端的实现voidCClientDlg:OnBn

9、Clickedbtnsendtomem()HANDLEhMapping;LPTSTRlpData;hMapping=CreateFileMapping(HANDLE(0xFFFFFFFF),NULL,PAGE_READWRITE,0,1024,_T(MyShare);if(hMapping=NULL)AfxMessageBox(_T(CreateFileMappingFailed);return;lpData=(LPTSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);if(lpData=NULL)AfxMessageBox(_T(Map

10、ViewOfFileFailed);return;UpdateData(TRUE);if(m_msg!=_T()wsprintf(lpData,m_msg);elseAfxMessageBox(_T(Messageisempty!);Sever端的实现:voidCServerDlg:OnBnClickedbtnopen()HANDLEhMapping;LPTSTRlpData;hMapping=CreateFileMapping(HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,1024,_T(MyShare);if(hMapping=NULL)AfxMessag

11、eBox(_T(CreateFileMappingfailed);return;lpData=(LPTSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);if(lpData=NULL)AfxMessageBox(_T(MapViewOfFilefailed);return;m_MapFileMessage=lpData;UpdateData(FALSE);:UnmapViewOfFile(lpData);CloseHandle(hMapping);实验内容1、掌握WinCE5.0下进程间通信机制;2、掌握通过对消息传递和共享内存的实现进程

12、间通信的方法;3、了解实现进程通信的编程方法;4、掌握EVC或VS.net编程方法实验步骤第壹步:连接好实验系统,打开实验箱电源。第二步:分别利用VisualS打开进程通信的Client和Sever工程文件Client.sln和Server.sln,进行编译:第三步:分别编译Client和Sever代码,点击运行按钮,这样程序就会下载到XSBase270目标板板上运行。Client和Sever运行界面分别如图4-1、4-2所示。图4-1Client端运行界面图4-2Sever端运行界面第四步:进程通信调试实验程序操作过程于XSBase270目标板上同时运行Sever和Client程序,当单击Client端的“SendMessage”按钮时,程序采用WM_COPYDATA消息实现进程通信,此时Sever端将接受Client发送的消息内容;单击Client端的“SendToMeme”按钮时,程序利用内存映射实现进程通信,Client端将通信内容映射到内存文件中,此时单击Sever端的“OpenMemoryMap”按钮,通过打开内存映射文件读出通信内容。习题和思考题1、 如果需要采用具体文件实现进程通信,怎样实现?2、 比较利用SendMessage发送消息和PostMessage发送消息的区别?分析为什么进程通信不能采用PostMessage来实现?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号