• 管道通讯


    服务端

    // Server.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <windows.h>
    #include<time.h>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
        srand(time(NULL));
    
        char buf[256] = "";
        DWORD rlen = 0;
        HANDLE hPipe = CreateNamedPipe(
            TEXT("\\.\Pipe\mypipe"),                        //管道名
            PIPE_ACCESS_DUPLEX,                                    //管道类型
            PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,    //管道参数
            PIPE_UNLIMITED_INSTANCES,                            //管道能创建的最大实例数量
            0,                                                    //输出缓冲区长度 0表示默认
            0,                                                    //输入缓冲区长度 0表示默认
            NMPWAIT_WAIT_FOREVER,                                //超时时间
            NULL);                                                //指定一个SECURITY_ATTRIBUTES结构,或者传递零值
    
        if (INVALID_HANDLE_VALUE == hPipe)
        {
            printf("Create Pipe Error(%d)
    ", GetLastError());
        }
        else
        {
            printf("Waiting For Client Connection...
    ");
    
            if (!ConnectNamedPipe(hPipe, NULL))    //阻塞等待客户端连接。
            {
                printf("Connection failed!
    ");
            }
            else
            {
                printf("Connection Success!
    ");
            }
    
            while (true)
            {
                if (!ReadFile(hPipe, buf, 256, &rlen, NULL)) //接受客户端发送过来的内容
                {
                    printf("Read Data From Pipe Failed!
    ");
                    break;
                }
                else
                {
                    printf("From Client: data = %s, size = %d
    ", buf, rlen);
    
                    char wbuf[256] = "";
                    sprintf(wbuf, "%s%d", wbuf, rand() % 1000);
                    DWORD wlen = 0;
                    WriteFile(hPipe, wbuf, sizeof(wbuf), &wlen, 0);    //向客户端发送内容
                    printf("To Client: data = %s, size = %d
    ", wbuf, wlen);
                    Sleep(1000);
                }
            }
            FlushFileBuffers(hPipe);
            DisconnectNamedPipe(hPipe);
            CloseHandle(hPipe);//关闭管道
        }
    
        system("pause");
        return 0;
    }

    客户端

    // Client.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <windows.h>
    #include<time.h>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        srand(time(NULL));
    
        DWORD wlen = 0;
        Sleep(1000);//等待pipe的创建成功!
    
        BOOL bRet = WaitNamedPipe(TEXT("\\.\Pipe\mypipe"), NMPWAIT_WAIT_FOREVER);
    
        if (!bRet)
        {
            printf("connect the namedPipe failed!
    ");
            return 0;
        }
    
        HANDLE hPipe = CreateFile(            //管道属于一种特殊的文件
            TEXT("\\.\Pipe\mypipe"),    //创建的文件名
            GENERIC_READ | GENERIC_WRITE,    //文件模式
            0,                                //是否共享
            NULL,                            //指向一个SECURITY_ATTRIBUTES结构的指针
            OPEN_EXISTING,                    //创建参数
            FILE_ATTRIBUTE_NORMAL,            //文件属性(隐藏,只读)NORMAL为默认属性
            NULL);                            //模板创建文件的句柄
    
        if (INVALID_HANDLE_VALUE == hPipe)
        {
            printf("open the exit pipe failed!
    ");
        }
        else
        {
            while (true)
            {
                char buf[256] = "";
                sprintf(buf, "%s%d", buf, rand() % 1000);
                if (WriteFile(hPipe, buf, sizeof(buf), &wlen, 0) == FALSE)    //向服务器发送内容
                {
                    printf("write to pipe failed!
    ");
                    break;
                }
                else
                {
                    printf("To Server: data = %s, size = %d
    ", buf, wlen);
                    char rbuf[256] = "";
                    DWORD rlen = 0;
                    ReadFile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);    //接受服务发送过来的内容
                    printf("From Server: data = %s, size = %d
    ", rbuf, rlen);
                }
                Sleep(1000);
            }
            CloseHandle(hPipe);//关闭管道
        }
    
        system("pause");
        return 0;
    }
    111
  • 相关阅读:
    模拟退火求二维费马点
    二叉查找树
    Linux中让普通用户拥有超级用户的权限
    python 正则表达式应用——缩写词扩充
    解决单链表中的环问题
    python数学函数
    train,dev,test数据集作用
    朴素贝叶斯法(二)——基本方法
    生成模型与判别模型
    ImportError: cannot import name wordnet
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/13026082.html
Copyright © 2020-2023  润新知