Windows處理序間通訊之郵槽

來源:互聯網
上載者:User

 

        郵槽是基於廣播通訊體系設計出來的,它採用不需連線的不可靠的資料轉送。郵槽是一種單向通訊機制,建立郵槽的伺服器處理序讀取資料,開啟油槽的客戶機進程寫入資料。為保證油槽在各種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);
}

由此可見,郵槽只可以實現單向通訊,如果想利用郵槽實現用一個進程既可以讀取資料,也可以發送資料,只需要在一個程式當中編寫一個郵槽的伺服器端和一個客戶機端,就可以在一個程式中實現接收和發送資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.