zoukankan      html  css  js  c++  java
  • 命名管道通信服务器和客户端创建

    服务器程序:(以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]!='')
        {
            buff[i++]=(char)str[i];
        }
        buff[i]='';
        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]='';
                    Form1->Edit1->Text = buf;
                }
            }
        }
    }
  • 相关阅读:
    开启休眠命令(用户找不到休眠复选框)
    小Q书桌(兼容win10)
    截图,仅截取活动窗口快捷键:Alt + Print Screen SysRq
    Windows10安装Dig命令工具
    拷贝文件保留原创建日期
    重装系统后,QQ(TIM)迁移聊天记录到指定位置
    完全拷贝命令
    Windows10/7 视频、图片、文档、音乐、收藏夹 等文件夹没有原始图标及中文名的解决方案
    js 判断日期大小、是否在时间范围内等处理
    Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小
  • 原文地址:https://www.cnblogs.com/mypsq/p/5037810.html
Copyright © 2011-2022 走看看