进程间通信(6) 邮槽
生活随笔
收集整理的這篇文章主要介紹了
进程间通信(6) 邮槽
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 郵槽是基于廣播通信體系設計出來的,它采用無連接的不可靠的數據傳輸。
- 郵槽是一種單向通信機制,創建郵槽的服務器進程讀取數據,打開郵槽的客戶端寫入數據。
- 郵槽可以實現一對多的單向通信。但是數據量小,通常都是424字節以下。假設client1先send,client2再send,最后server可以連續receive兩次
- 如果是網絡通信,server的名稱寫".",client寫服務器電腦名或ip地址
1. 過程
a. server 先CreateMailslot
b. client 再CreateFile連接之前的mailSlot
c. client writeFile
d. server readFile
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);【引用】
總結
以上是生活随笔為你收集整理的进程间通信(6) 邮槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进程间通信(5) 命名管道2 不同机器通
- 下一篇: 进程间通信(7) “剪贴板“、“匿名管道