命名管道通信服务器和客户端创建

服务器程序:(以C++Builder为例)

void __fastcall ServerThread::Execute()
{
    wchar_t *pipeName = L"\\\\.\\pipe\\testpipe";
    pipe_handle = CreateNamedPipe(pipeName,
                        PIPE_ACCESS_DUPLEX,
                        PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
                        1,
                        1024,
                        1024,
                        1000,
                        NULL);
    if(pipe_handle == INVALID_HANDLE_VALUE)
    {
        ShowMessage(L"通道创建失败");
        return;
    }
    ShowMessage(L"通道创建成功");

    //--------------------------进入阻塞状态,等待客户端响应---------------------------------

    if(ConnectNamedPipe(pipe_handle, NULL))
    {
        ShowMessage(L"服务器成功响应客户端");

    }
    else
    {
        ShowMessage(L"服务器成功响应客户端失败");
        CloseHandle(pipe_handle);
    }
}

消息的发送:

void __fastcall TForm1::Button2Click(TObject *Sender){    HANDLE pHandle = serverThread->getPipeHandle();    if(pHandle==NULL)    {        ShowMessage("句柄为NULL");        return;    }    wchar_t *str = Edit1->Text.t_str();    int i=0;    char buff[1024];    while(str[i]!='\0')    {        buff[i++]=(char)str[i];    }    buff[i]='\0';    ShowMessage(buff);    DWORD len;    bool hr = WriteFile(pHandle,buff,strlen(buff),&len,NULL);    if(hr)    {        ShowMessage("消息发送成功");    }    else    {        ShowMessage("消息发送失败");    }}

客户端程序:

void __fastcall ClientThread::Execute(){    wchar_t *pipeName = L"\\\\192.168.2.108\\pipe\\testpipe";    if(WaitNamedPipe(pipeName,NMPWAIT_WAIT_FOREVER)==FALSE)    {        ShowMessage(L"未找到服务器");        return;    }    ShowMessage("客户端成功连接服务器");    pipe_handle = CreateFile(pipeName,                GENERIC_READ | GENERIC_WRITE,                FILE_SHARE_WRITE,                NULL,                OPEN_EXISTING,                FILE_ATTRIBUTE_ARCHIVE | FILE_FLAG_WRITE_THROUGH,                NULL);    if(pipe_handle!=INVALID_HANDLE_VALUE)    {        char buf[1024];        DWORD len;        Sleep(1500);        while(1)//消息的接收        {            Sleep(300);            if(ReadFile(pipe_handle,buf,1024,&len,NULL))//如果一直没有接收到消息则处于阻塞状态            {                buf[len]='\0';                Form1->Edit1->Text = buf;            }        }    }}

原文链接: https://www.cnblogs.com/mypsq/p/5037810.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/225698

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午12:54
下一篇 2023年2月13日 下午12:54

相关推荐