本文介绍了如何使用namedpipe在客户端和服务器之间发送和读取消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞!I have created Client and Server Application, and when I am sending message from client to server, server is reading the message from client but it is displaying junk messages, how can I display exact message?can you please explain. 我尝试了什么: 我的服务器代码是: -What I have tried:My Server code is:- Server::Server(void){hPipe = CreateNamedPipe("\\\\.\\pipe\\mypipe",PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,BUFSIZE,BUFSIZE,0,NULL);if(hPipe==INVALID_HANDLE_VALUE){std::cout<<"PipeCreation Failed";}elsestd::cout<<"PipeCreation Sucessful";Run();} void Server::Run() { std::cout<<"Server running:\n"; std::cout<<"waiting for the client:\n"; ConnectToClient(hPipe,NULL); ReadFile(hPipe,m_buffer,127 * sizeof(wchar_t),cbRead,NULL); } bool Server::ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED) { wchar_t m_buffer[128]; DWORD cbRead=0; if (result) { m_buffer[sizeof(wchar_t)] = '\0'; std::cout << "Number of bytes read: " << cbRead <<std::endl; std::cout << "Message: " << m_buffer << std::endl; } else { std::cout << "Failed to read data from the pipe." << std::endl; } return true; } void Server::ConnectToClient(HANDLE,LPOVERLAPPED) { if(FALSE == ConnectNamedPipe(hPipe, NULL)) { std::cout<<"Pipe connection failed"; } else {std::cout<<"Pipe connection sucessful"; } } 我的客户代码是: - 客户::客户(无效) { hPipe = CreateFile(\\\\.\\pipe \\ mypipe,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); if(hPipe == INVALID_HANDLE_VALUE) { std :: cout<<管道连接失败:\ n; } 其他 std :: cout<<管道连接成功:\ n; WriteFile(hPipe,m_buffer,cbToWrite,cbWritten,NULL); } bool Client :: WriteFile(HANDLE,LPCVOID,DWORD, LPDWORD,LPOVERLAPPED) { const wchar_t * m_buffer = L*** Hello Pipe World ***; if(result){ std :: cout<< 发送的字节数:<< cbWritten<< std :: endl; } else { std :: cout<< 消息:<< std :: endl; } 返回true; }My Client code is :-Client::Client(void){hPipe = CreateFile("\\\\.\\pipe\\mypipe",GENERIC_READ |GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);if(hPipe == INVALID_HANDLE_VALUE){std::cout<<"pipe connection Failed:\n";}elsestd::cout<<"pipe connected sucessfully:\n";WriteFile(hPipe,m_buffer,cbToWrite,cbWritten,NULL);}bool Client::WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED){const wchar_t *m_buffer = L"*** Hello Pipe World ***";if (result) { std::cout << "Number of bytes sent: " << cbWritten << std::endl; } else { std::cout << "Message:" << std::endl; }return true;}推荐答案代码示例由 MSDN 轻轻提供(例如,参见命名管道客户端 - Windows应用程序| Microsoft Docs [ ^ ])通常效果很好。我建议你使用这样的程序作为应用程序的起点(工作)点。The code samples gently provided by MSDN (see, for instance Named Pipe Client - Windows applications | Microsoft Docs[^]) usually works well. I suggest you to use such programs as starting (working) points for your application.这是一篇很有趣的文章,它很好地解释了命名管道,并有一个示例代码的链接:使用命名管道将GUI连接到Windows中的控制台应用程序Dobb博士 [ ^ ]Here is an interesting article that explains named pipes well, and has a link to the example code: Using Named Pipes to Connect a GUI to a Console App in Windows | Dr Dobb's[^] 这篇关于如何使用namedpipe在客户端和服务器之间发送和读取消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-22 12:27
查看更多