实验七 进程间通信机制

  • 格式:doc
  • 大小:29.50 KB
  • 文档页数:2

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一、实验内容

在客户端(Client端)使用SendMessage函数发送消息到服务器端(Server端)实现进程间通信。

二、实验目的

由于Windows是事件驱动的,所以消息传递对于Windows编程是很重要的。通过实践来掌握Windows的消息传递机制。

三、实验原理

进程问的通信根据通信内容可以划分为两种:控制信息的传送与大批量数据传送。消息传递机制是实现进程通信的一种方法。发送进程在发送消息之前,先在自己的内存空间设置一个发送区,把欲发送的消息填入其中,然后再用发送过程将其发送出去。接收进程则在接收消息之前,在自己的内存空间内设置相应的接收区,然后用接收过程接收消息。发送进程向消息缓冲区写消息,而不用管接收进程是否已经准备好要接收。接收进程则从消息缓冲区内读消息。

四、实验要求

程序需要实现客户端(Client端)和服务器端(Server端)。

五、实验步骤

1、在VC中打开程序;

2、仔细阅读程序,熟悉了解相关函数的使用;

(1)相关程序代码:

Client端相关代码

ClientDlg.cpp:

void CClientDlg::OnBUTTONSendMessage()

{

CString str = "server";

CWnd *pWnd = CWnd::FindWindow(NULL,str);

UpdateData(TRUE);

if(pWnd&&m_msg!=_T(""))

{

COPYDATASTRUCT buf;

buf.cbData = 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"));

}

void CClientDlg::OnButtonOk()

{

CDialog::OnOK();

// TODO: Add your control notification handler code here

}

(2)Server端相关代码

ServerDlg.cpp:

BOOL CServerDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)

{

// TODO: Add your message handler code here and/or call default

CString str = (LPCSTR) (pCopyDataStruct->lpData);

CWnd *p2Wnd = GetDlgItem(IDC_EDIT1);

UpdateData(TRUE);

p2Wnd->SetWindowText(str);

return CDialog::OnCopyData(pWnd, pCopyDataStruct);

}

3、运行程序,观察运行结果。