邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。
邮槽是一种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户端写入数据。
邮槽可以实现一对多的单向通信。但是数据量小,通常都是424字节以下。
一、服务器端程序
void CMailSlotSrcView::OnMailRecv()
{
HANDLE hMailSlot;//用来保存将要创建的邮槽句柄
//创建邮槽
hMailSlot = CreateMailslot("\\\\.\\mailslot\\MyMailSlot", //圆点表示本地机器,可以改为服务器所在机器的名称,实现网络间进程的通信
0, MAILSLOT_WAIT_FOREVER, NULL);
if (INVALID_HANDLE_VALUE == hMailSlot)
{
MessageBox("创建邮槽失败!");
return;
}
//从邮槽读取数据
char buf[100];
DWORD dwRead;
if (!ReadFile(hMailSlot, buf, 100, &dwRead, NULL))
{
MessageBox("读取数据失败!");
CloseHandle(hMailSlot);
return;
}
MessageBox(buf);
CloseHandle(hMailSlot);
}
二、客户端程序
void CMailSlotClientView::OnMailSend()
{
//打开邮槽
HANDLE hMailSlot;//用来保存将要打开的邮槽句柄
hMailSlot = CreateFile("\\\\.\\mailslot\\MyMailSlot", GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hMailSlot)
{
MessageBox("打开邮槽失败!");
return;
}
//向邮槽写入数据
char buf[] = "dadadadakai";
DWORD dwWrite;
if (!WriteFile(hMailSlot,buf, strlen(buf)+1, &dwWrite, NULL))
{
MessageBox("写入数据失败!");
CloseHandle(hMailSlot);
return;
}
CloseHandle(hMailSlot);
}