如何解析通过管道收到的消息

时间:2012-04-18 16:48:11

标签: c++ winapi

我创建了我的管道服务器,它创建了一个实例 使用ConnectNamedPipe函数管道。 之后我从管道读取并将数据保存到缓冲区。 我还没有创建我的客户端,但我必须做一些操作。

我的客户端必须写管道2件事: 1 - 服务器将执行的操作 - 减法,乘法,加法,除法(我正在尝试实现某种计算器) 2 - 2服务器将计算的数字

我的服务器必须从管道中读取这些操作和2个数字 并在屏幕上打印结果。

所以,我的问题是,如何解析客户端写的那两个操作?

我的服务器工作正常但我解析时遇到问题。

#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
    HANDLE createPipe;
    BOOL Connect;
    BOOL Read;
    int buffer[100];
    DWORD numBytesRead;

    //Create Pipe
    createPipe = CreateNamedPipe(
        L"\\\\.\\pipe\\StackOverflow",
        PIPE_ACCESS_DUPLEX,
        PIPE_TYPE_MESSAGE,
        PIPE_UNLIMITED_INSTANCES,
        1024,
        1024,
        NMPWAIT_USE_DEFAULT_WAIT,
        NULL);

    //Check for failure
    if(createPipe == INVALID_HANDLE_VALUE){
        cout<<"Failed to create a pipe! "<<endl;
    }

    //Create instance of the pipe
    Connect = ConnectNamedPipe(
        createPipe,
        NULL);

    //Check for failure
    if(!(Connect)){
        cout<<"Failed to connect to the pipe"<<endl;
        CloseHandle(createPipe);
    }

    //Read bytes from the buffer
    Read = ReadFile(
            createPipe, 
            buffer,
            99 * sizeof(buffer),
            &numBytesRead,
            NULL);

    //check for failure
    if(!(Read)){
        cout<<"Failed to read from the pipe"<<endl;
        CloseHandle(createPipe);
    }

    return 0;
}

THX

1 个答案:

答案 0 :(得分:0)

您应该研究序列化 - 如何编码和解码管道数据应该被封装。你有一个Calculation对象有两个操作数元素(数字)和一个操作(可能是枚举?) - 那么问题就变成了如何序列化(发送)和反序列化(接收)该对象,而不管管道I / O.

查看概念的Boost.Serialization - boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html