人亦已歌 发表于 2023-2-18 22:44:59

进程/网络通信之邮槽Mailslot的实现原理与核心逻辑

注意:邮槽只能实现单向通信。
第一部分:服务端创建邮槽写入数据
void CMailslotSDlg::OnBnClickedButtonRecv()
{
        // TODO: 在此添加控件通知处理程序代码

        m_btnRecv.EnableWindow(false);
        m_btnRecv.SetWindowTextW(_T("等待数据到来..."));
        //创建邮槽
        HANDLE hMailslot;
        hMailslot=CreateMailslot(_T("\\\\.\\mailslot\\MyMailsolt"),0,MAILSLOT_WAIT_FOREVER,NULL);
        if(!hMailslot){
        AfxMessageBox(_T("创建邮槽失败"));
        m_btnRecv.EnableWindow(true);
        m_btnRecv.SetWindowTextW(_T("接收"));
        return;
        }

        //读取数据
        TCHAR buf;
        ZeroMemory(buf,400);
        DWORD dwRead;
        if(!ReadFile(hMailslot,buf,400,&dwRead,NULL)){
        AfxMessageBox(_T("读取数据失败"));
        m_btnRecv.EnableWindow(true);
        m_btnRecv.SetWindowTextW(_T("接收"));
        CloseHandle(hMailslot);
        return;
        };

        //写入编辑框
        SetDlgItemText(IDC_EDIT_RECV,buf);
        CloseHandle(hMailslot);
        m_btnRecv.EnableWindow(true);
        m_btnRecv.SetWindowTextW(_T("接收"));
}



第二部分:客户端读取邮槽中的数据


void CMailslotCDlg::OnBnClickedButtonSend()
{
        // TODO: 在此添加控件通知处理程序代码
        HANDLE hMailslot;
        hMailslot=CreateFile(_T("\\\\.\\mailslot\\MyMailsolt"),GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if(hMailslot==INVALID_HANDLE_VALUE){
                AfxMessageBox(_T("打开邮槽失败"));
                return;
        }
        //写邮槽数据
        TCHAR buf;
        ZeroMemory(buf,400);
        GetDlgItemText(IDC_EDIT_SEND,buf,400);
        DWORD dwWrite;
        if(!WriteFile(hMailslot,buf,400,&dwWrite,NULL)){
        AfxMessageBox(_T("写邮槽数据失败"));
        CloseHandle(hMailslot);
        return;
        };

        CloseHandle(hMailslot);

}





实现效果:
服务端点击接收按钮等待客户端发送数据的到来,数据到来后写入到编辑框中。



以上代码生成的可执行文件:


老王家小子 发表于 2023-2-20 21:45:45

说得好,学计算机学的不仅仅是计算机,好的数学基础也是必不可少的

chinaboystudent 发表于 2023-2-21 10:53:58

其实很多人都懂编程,但不是很精通。我也没有找到工作。我可那还没有你精。我是说VC。我学VB4年了。我QQ162252487。

kndanny 发表于 2023-2-21 23:58:53

确实不错!很负责哟!   

我是衣迷 发表于 2023-2-22 14:04:14

不错,这篇文章

gududexiang 发表于 2023-2-24 14:23:51

写得真好,是学习的榜样在失败中认识自己,在失败中寻找自己,在失败中战胜自己.你的故事给我的感受就是:我们是菜,但我们一定能做的更好

小小二 发表于 2023-2-25 10:32:11

我 是刚学这门课的,当我看到这以后,震惊了,一个程序的设计是如此的复杂,我想我也是时候奋斗了,愿所有的程序设计人员都能步入高手之列      突想起伯苓师的一句话“中国不亡有我在” 奋发图强,创造中国人的辉煌

啊远 发表于 2023-2-26 05:39:35

不错!

hpygzhx520 发表于 2023-2-27 01:47:56

谢谢!人的一生中,能够多遇上几个这样的人,那么世界上很多很多的人,将会少走很多很多的路。

ftsdzy2003 发表于 2023-2-28 21:54:38

谢谢你们的留言 ,我看过深感领悟,想不到能在网上看到一些原本上书本看不到的东西。。。。
页: [1] 2 3 4
查看完整版本: 进程/网络通信之邮槽Mailslot的实现原理与核心逻辑