Member 12711426 Ответов: 2

Как отправить и прочитать сообщение между клиентом и сервисом с помощью namedpipe


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.


Что я уже пробовал:

Мой код сервера:-
 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";
	}
	else
	
		std::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("\\\\.\\трубы\\mypipe",помощью generic_read |помощью generic_write,0,null,то параметра open_existing,0,null в);
if(hPipe == INVALID_HANDLE_VALUE)
{
std::cout<<"ошибка соединения труб:\n";
}
еще
с std::соиь<&ЛТ;"трубы, соединенной успешно:\Н";
WriteFile(hPipe,m_buffer,cbToWrite,cbWritten,NULL);

}
bool Client::WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED)
{
const wchar_t *m_buffer = L"*** Привет трубный мир ***";

если (результат) {
с std::соиь <&ЛТ; "количество байт, отправленных:" &ЛТ;&ЛТ; cbWritten &ЛТ;&ЛТ; функция std::епси;
} еще {
с std::соиь <&ЛТ; "сообщение:" &ЛТ;&ЛТ; функция std::епси;
}
вернуть true;
}

Richard MacCutchan

Я не могу понять, как этот код вообще может компилироваться. В ваших определениях функций отсутствуют имена всех параметров.

2 Ответов

Рейтинг:
0

CPallini

Образцы кода мягко предоставлены компанией MSDN (см., например: Клиент именованного канала - приложения Windows | Microsoft Docs[^]) обычно работает хорошо. Я предлагаю вам использовать такие программы в качестве стартовых (рабочих) точек для вашего приложения.


Рейтинг:
0

RickZeeland

Вот интересная статья, которая хорошо объясняет именованные каналы и содержит ссылку на пример кода: Использование именованных каналов для подключения графического интерфейса пользователя к консольному приложению в Windows | Dr Dobb's[^]