2012-04-18 11 views
-3

ConnectNamedPipe関数を使用して パイプのインスタンスを作成するパイプサーバーを作成しました。その後、私はパイプから読み込んで、バッファにデータを保存します。 まだクライアントを作成していませんが、いくつかの操作を行う必要があります。減算、乗算、加算、課(私は電卓のようなものを実装しようとしている) 2 - - 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

+0

はこの宿題ですか? – sashoalm

+0

私はしたい..私は私のプログラミングのスキルを向上させる私を助けるこれを行うにはしたい – user1341970

+0

OK。あなたのタイトルは、パイプを介してデータを渡すことに問題があると言います。だからあなたはクライアントと一緒にデータを送信しますが、それはサーバーに届かないのですか? – sashoalm

答えて

0

あなたは、シリアル化を研究しなければならない - あなたはパイプデータをカプセル化する必要があるエンコードおよびデコードする方法。 2つのオペランド要素(数値)とOperation(列挙型かもしれません)を持つCalculationオブジェクトがあります。次に、パイプI/Oとは独立して、そのオブジェクトをシリアル化(送信)および逆シリアル化(受信側)する方法が問題になります。コンセプトのため

チェックアウトBoost.Serialization - boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html

関連する問題