我创建了我的管道服务器,它创建了一个实例 使用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
答案 0 :(得分:0)
您应该研究序列化 - 如何编码和解码管道数据应该被封装。你有一个Calculation对象有两个操作数元素(数字)和一个操作(可能是枚举?) - 那么问题就变成了如何序列化(发送)和反序列化(接收)该对象,而不管管道I / O.
查看概念的Boost.Serialization - boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html