定义
邮槽也是一个内核对象
使用邮槽进行通信的进程也分为客户端和服务端,邮槽由服务端创建,邮槽通信是单向的,只有服务端才能从邮槽中读取消息,客户端只能写入消息,每条消息不能超过424字节,邮槽可以进行网络通信
代码
1.在进程Processcommunity和Processcommclient各自定义两个按钮
2.在服务端的接收按钮编程
void CProcesscommunityDlg::OnBnClickedButtonrecv()
{
/创建一个邮槽
LPCTSTR szSlotName = TEXT("\\\\.\\mailslot\\Mymailslot"); /邮槽名
HANDLE hSlot = CreateMailslot(szSlotName, //第一个参数为 名字
0, / 消息大小
MAILSLOT_WAIT_FOREVER, / 读取时间,永远阻塞在这里,直到读到数据为止
NULL ); /安全属性
读取消息
char szBuff[100]{};
DWORD dwRead; /实际读取的个数
if (!ReadFile(hSlot,szBuff,100,&dwRead,NULL))
{
MessageBox("Read failed");
return;
}
TRACE("dWREAD==%d\n", dwRead); /打印实际长度
MessageBox(szBuff);
3.在客户端写入按钮编程
void CProcesscommclientDlg::OnBnClickedButtonsend()
{
LPCTSTR szSlotName = TEXT("\\\\.\\mailslot\\Mymailslot");/
邮槽名必须一样
HANDLE hMailSlot =
CreateFile(szSlotName, FILE_GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
第二个参数表示可写,第三个表示可共享
char szBuff[100]="woshizhui";
DWORD dwwrite;
if (!WriteFile(hMailSlot, szBuff, strlen(szBuff+1), &dwwrite, NULL))
{
MessageBox("WRITE failed");
return;
}
CloseHandle(hMailSlot);
这样,就能通过邮槽进行两个进程之间的通信。感觉和TCP 客户端服务端那个差不多,不过少了很多代码