程序間通訊(6) 郵槽
阿新 • • 發佈:2020-12-11
技術標籤:作業系統相關
- 郵槽是基於廣播通訊體系設計出來的,它採用無連線的不可靠的資料傳輸。
- 郵槽是一種單向通訊機制,建立郵槽的伺服器程序讀取資料,開啟郵槽的客戶端寫入資料。
- 郵槽可以實現一對多的單向通訊。但是資料量小,通常都是424位元組以下。假設client1先send,client2再send,最後server可以連續receive兩次
- 如果是網路通訊,server的名稱寫".",client寫伺服器電腦名或ip地址
1. 過程
a. server 先CreateMailslot
b. client 再CreateFile連線之前的mailSlot
c. client writeFile
2.該函式利用指定的名稱來建立一個郵槽,然後返回所建立的郵槽的控制代碼。
HANDLE WINAPI CreateMailslot(
__in LPCTSTR lpName,
__in DWORD nMaxMessageSize,
__in DWORD lReadTimeout,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
-
引數 lpName
指定了將要建立的郵槽的名稱,該名稱的格式必須為 \.\mailslot\MailslotName。 -
引數 nMaxMessageSize
用來指定可以被寫入到郵槽的單一訊息的最大尺寸,為了可以傳送任意大小的訊息,需要將該引數設定為 0 。 -
引數 lReadTimeOut
指定讀取操作的超時時間間隔,以毫秒作為單位。
讀取操作在超時之前可以等待一個訊息被寫入到郵槽中,如果將這個值設定為 0 ,那麼若沒有訊息可用的話,該函式將立即返回。如果將該值設定為 MAILSLOT_WAIT_FOREVER,則該函式會一直等待,直到有訊息可用。 -
引數 lpSecurityAttributes
一般設定為 NULL 即可,即採用 Windows 預設的針對於郵槽的安全性。
3. code
server:
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);
client
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[]="http://www.sunxin.org";
DWORD dwWrite;
if(!WriteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL))
{
MessageBox("寫入資料失敗!");
CloseHandle(hMailslot);
return;
}
CloseHandle(hMailslot);
【引用】