实验八 进程间通信机制——消息传递

Ann_0 2011-10-24 01:51:03
实验内容
在客户端(Client端)使用SendMessage函数发送消息到服务器端(Server端)实现进程间通信。
二、实验目的
由于Windows是事件驱动的,所以消息传递对于Windows编程是很重要的。通过实践来掌握Windows的消息传递机制。
实验原理
进程间的通信根据通信内容可以划分为两种:控制信息的传送与大批量数据的传送。消息传递机制是实现进程通信的一种方法。发送进程在发送消息之前,先在自己的内存空间设置一个发送区,把欲发送的消息填入其中。然后再用发送过程将其发送出去。接收进程则在接收消息之前,在自己的内存空间内设置相应的接收区,然后用接收过程接收消息。发送进程向消息冲区写消息,而不用管接收进程是否已经准备好要接收。接收进程则从消息缓冲区内读消息。
实验要求
程序需要实现客户端(Client端)和服务器端(Server端)。
客户端(Client端)需要两个Button控件,ID、Caption分别为:IDC BUTTON SendMessage、“发送消息”,IDC BUTTON OK、“确定”和一个ID为IDC EDIT1的EditBox控件。
服务器端(Server端)需要一个Button控件,ID、Caption分别为:IDC BUTTON OK、“确定”,一个ID为IDC EDIT1的Edit Box控件,一个ID、Caption分别为IDC STATIC、“接收消息”的Static Text控件。
实验步骤
创建一个基于对话框的名为Client的工程。
把控件拖到对话框上。
为IDC EDIT1添加类型为CString的成员变量m msg。
双击“发送消息”按钮,添加如下代码:
void CClientDig::OnBUTTONSendMessage()

CString str = "server”;
CWnd * pWnd = CWnd::FindWindow(NULL,str);
UpdateData(TRUE);
If(pWnd&&m msg!= T(””))

COPYDATASTRUCT buf;
buf.cbDate=lstrlen((LPTSTR)m msg.GetBuffer(0))+1;
buf.lpData=m msg.GetBuffer(0);
CString tmp= T(“发送“)+m msg+ T(“到Server”);
AfxMessageBox(tmp);
PWnd->SendMessage(WM COPYDATA.0,(LPARAM)&buf);

else
MessageBox( T(“No such Things.”));

在发送端首先需要找到目的窗口,如果目的窗口不存在则弹出对话框给用户以提示。在找到目的窗口的前提下,如果发送窗口内的数据不为空的话,以对话框的形式提示用户要发送消息,并用SendMessage函数来发送消息。
双击“确定”按钮,添加如下代码:
Void CClientDlg::OnButtonOk()

CDialog::OnOK();

Build Client.exe,点击图标.Output输出如下所示,则Client工程建立完毕.
Client.exe-0 error(s),0 warning(s)
新建一个基于对话框的名为Server的工程,方法同Client工程。
把控件拖到对话框上。
为IDC EDIT1添加类型为CString的成员变量m show。
双击“确定”按钮,添加如下代码:
Void CServerDig::OnBugttonOk()

CDialog::OnOK();

使用ClassWizard添加OnCopyData函数。
OnCopyData为消息映射函数,该函数主要用来获得来自发送方的消息,并将其显示到控件中,添加如下代码:
BOOL CServerDlg::OnCopyData(CWnd * pWnd,COPYDATASTRUCET* pCopyDataStruct)

CString str=(LPCSTR)(pCopyDataStruct->lpData);
CWnd * p2Wnd=GetDlgItem(IDC EDIT1);
UpdateData(TRUE);
P2Wnd->SetWindowsText(str);
Return CDialog::OnCopyData(pWnd,pCopyDagtaStruct);

Build Server.exe,方法同Client工程.
运行Client和Server.点击Client工程和Server工程的!图标.



求高人帮忙写写。。。







...全文
737 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
目 录 第一部分 Linux 操作环境 第1章 Linux基础 1.1 登录Linux系统 1.2 Linx的shell 1.3 shell的一些基本命令 第2章 文本编辑 2.1 vi文本编辑器 2.2 emacs文本编辑器 第3章 Linux文件系统操作 3.1 文件类型 3.2 文件系统目录结构 3.3 目录操作的基本命令 3.4 文件操作的基本命令 3.5 显示字符串echo 3.6 命令行中使用扩展符 第4章 文件权限与文件共享 4.1 存取权限 4.2 改变文件的存取权限 4.3 特殊权限位SUID、SGID、Sticky 4.4 硬链接 4.5 符号链接 第5章 文件管理工具 5.1 正则表达式 5.2 排序文件 5.3 查找文件 5.4 搜索文件内容 5.5 命令记录 5.6 压缩文件、解压缩文件与打包文件 5.7 RPM包管理 第6章 Linux进程、管道和重定向 6.1 进程的属性 6.2 进程的终止 6.3 进程和作业控制 6.4 命令行中使用操作符 6.5 Linux系统启动和进程层次结构 6.6 系统启动和关机 6.7 输入、输出重定向 6.8 使用文件描述符 6.9 输入和输出重定向的组合使用 6.10 管道(pipe) 第7章 C语言开发工具 7.1 编写程序的工具 7.2 编C语言程序 7.3 make工具 7.4 gdb调试工具 第8章 Bourn Again Shell编程 8.1 bash脚本的建立和运行 8.2 shell的变量 8.3 shell脚本位置参数的传递 8.4 控制结构语句 8.5 其他几个有用的语句 8.6 数值处理 8.7 数组 8.8 函数 8.9 here文档 8.10 exec命令 8.11 trap命令 8.12 调试脚本程序 第二部分 Linux 内核分析与实践 第9章 编译Linux内核 9.1 Linux内核 9.2 查找并且下载一份内核源代码 9.3 部署内核源代码 9.4 配置内核 9.5 编译内核和模块 9.6 了解Linux内核的启动 9.7 应用grub配置启动文件 9.8 编写制作Linux启动盘的shell脚本程序 9.9 Linux源程序的目录分布 9.10 学习Linux的常用工具 9.11 查看Linux内核状况 9.12 编程序检查系统状况 9.13 Linux编程环境 第10章 系统调用 10.1 一个简单的例子 10.2 系统调用基础知识 第11章 进程创建 11.1 进程是什么 11.2 进程的产生 11.3 进程的消亡 / 退出 11.4 实验1 11.5 实验2 11.6 实验3 第12章 /proc文件系统 12.1 /proc文件系统 12.2 现有proc文件系统中各个文件的含义 12.3 怎样使用/proc文件系统 12.4 seq file 12.5 proc文件系统的内部实现机制 12.6 实验一:使用proc文件系统的一个简单例子 12.7 实验二:利用/proc文件系统显示缺页状态 12.8 实验三:seq file使用例子 第13章 内核模块 13.1 什么是内核模块 13.2 模块实现机制 13.3 使用内核模块 13.4 实例 第14章 内存管理 14.1 虚拟内存管理 14.2 Linux虚拟内存管理 14.3 实例 14.4 综合实验的原理 14.5 综合实验的实施 第15章 内核时钟与定时器 15.1 关于时钟和定时器 15.2 Linux系统时钟 15.3 Linux系统定时器 15.4 时钟命令 15.5 实验一:一个应用定时器的简单例子 15.6 实验二:统计关于进程的时间 15.7 实验三:更进一步的进程时间统计 第16章 共享内存 16.1 进程间通信和共享内存 16.2 共享内存的API 16.3 共享内存在Linux中的实现 第17章 同步机制 17.1 同步机制 17.2 Linux中几种同步机制的实现 17.3 设计我们自己的同步机制 第18章 文件系统 18.1 文件系统基本概念 18.2 文件系统的抽象 18.3 VFS文件系统 18.4 ext2文件系统 18.5 对文件的操作 18.6 块读写与页缓存 18.7 本章总结 18.8 实验:添加一个文件系统 18.9 附录:优秀的日志文件系统——ext3
Linux系统提供了各种系统调用API用于进程之间的通信:    无名管道PIPE    命名管道FIFO    消息队列    共享内存    信号量    文件锁    信号signal....其中还包括system V和POSIX 两种接口标准,除此之外,Linux系统自身还扩展了自己的一套API接口用于进程间通信,比如signalfd、timerfd、eventfd等。本视频教程为《Linux系统编程》第05期,本期课程将会带领大家学习Linux下将近15种进程间通信IPC工具的使用,了解它们的通信机制、编程实例、使用场景、内核中的实现以及各自的优缺点。本课程会提供PDF版本的PPT课件和代码,学员购买课程后可到课程主页自行下载嵌入式自学路线指导图:------------------------------------------------------------------------------------------------------                   《嵌入式工程师自我修养》嵌入式自学系列教程                                          作者:王利涛------------------------------------------------------------------------------------------------------一线嵌入式工程师精心打造,嵌入式学习路线六步走: 第 1 步:Linux三剑客零基础玩转Linux+UbuntuGit零基础实战:Linux开发技能标配vim从入门到精通基础篇:零基础学习vim基本命令vim从入门到精通定制篇:使用插件打造嵌入式开发IDEmakefile工程实践基础篇:从零开始一步一步写项目的Makefilemakefile工程实践第2季:使用Autotools自动生成Makefile软件调试基础理论printf打印技巧Linux内核日志与打印使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境第 2 步:C语言嵌入式Linux高级编程第1期:C语言进阶学习路线指南第2期:计算机架构与ARM汇编程序设计第3期:程序的编译、链接和运行原理第4期:堆栈内存管理第6期:数据存储与指针第7期:嵌入式数据结构与Linux内核的OOP思想第8期:C语言的模块化编程第9期:CPU和操作系统入门      搞内核驱动开发、光会C语言是不行的!      你还需要学习的有很多,包括:计算机体系架构、ARM汇编、程序的编译链接运行原理、CPU和操作系统原理、堆栈内存管理、指针、linux内核中的面向对象思想、嵌入式系统架构、C语言的模块化编程.....第 3 步:Linux系统编程第00期:Linux系统编程入门第01期:揭开文件系统的神秘面纱第02期:文件I/O编程实战第03期:I/O缓存与内存映射第04期:打通进程与终端的任督二脉第05期:进程间通信-------------------we are here!‍    第 4 步:Linux内核编程‍    练乾坤大挪移,会不会九阳神功,是一道坎。搞驱动内核开发,懂不懂内核也是一道坎。第 5 步:嵌入式驱动开发    芯片原理、datasheet、硬件电路、调试手段、总线协议、内核机制、框架流程....第 6 步:项目实战    嵌入式、嵌入式人工智能、物联网、智能家居...

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧