郵槽是基於廣播通訊體系設計出來的,它採用不需連線的不可靠的資料轉送。郵槽是一種單向通訊機制,建立郵槽的伺服器處理序讀取資料,開啟油槽的客戶機進程寫入資料。為保證油槽在各種Windows平台下都能夠正常工作,我們傳輸訊息的時候,應將訊息的長度限制在424位元組以下。
郵槽伺服器端以及客戶機端的編寫都比較簡單,直接給出程式:
伺服器端:
void CMailSlotSrvView::OnMailslotRecv()
{
// TODO: 在此添加命令處理常式代碼
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 CMailSlotCltView::OnMailslotSend()
{
// TODO: 在此添加命令處理常式代碼
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[]="山東大學百年校慶";
DWORD dwWrite;
if(!WriteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL))
{
MessageBox("寫入資料失敗!");
CloseHandle(hMailslot);
return;
}
CloseHandle(hMailslot);
}
由此可見,郵槽只可以實現單向通訊,如果想利用郵槽實現用一個進程既可以讀取資料,也可以發送資料,只需要在一個程式當中編寫一個郵槽的伺服器端和一個客戶機端,就可以在一個程式中實現接收和發送資料。