-3

ConnectNamedPipe 関数を使用してパイプのインスタンスを作成するパイプ サーバーを作成しました。その後、パイプから読み取り、データをバッファに保存します。まだクライアントを作成していませんが、いくつかの操作を行う必要があります。

クライアントはパイプに 2 つのことを書き込む必要があります: 1 - サーバーが行う操作 - 減算、乗算、加算、除算 (一種の電卓を実装しようとしています)

私のサーバーは、パイプからこれらの操作と 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;
}

どうも

4

1 に答える 1

0

シリアル化を調査する必要があります。パイプデータをエンコードおよびデコードする方法をカプセル化する必要があります。2つのオペランド要素(数値)と1つの演算(列挙かもしれませんか?)を持つCalculationオブジェクトがあります。問題は、パイプI / Oとは関係なく、そのオブジェクトをどのようにシリアル化(送信)および逆シリアル化(受信)するかです。

概念についてはBoost.Serializationをチェックしてください-boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html

于 2012-04-19T14:58:09.763 に答える