F
FanJuS
Всем привет! Помогите пожалуйсто программа Pipe (именованные каналы) не работает. Не пойму в чём ошибка , всё запускается, но соединения нет
Часть первая - сервер.
Часть вторая - клиент.
Часть первая - сервер.
Код:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
int _cdecl main(void)
{
//Создание именованого канала
HANDLE hPipe = CreateNamedPipe("\\\\.\\pipe\\PipeSvr", //имя канала
PIPE_ACCESS_DUPLEX | WRITE_DAC, //запись и чтение
PIPE_TYPE_BYTE, // данные записываются как поток байтов
PIPE_UNLIMITED_INSTANCES, // Неограниченное количество подключений
0, // Размеры буферов по умолчанию
0,
NMPWAIT_WAIT_FOREVER, // Ожидать процесс будет бесконечно
NULL); // Атрибуты безопасности по умолчанию
if(hPipe==INVALID_HANDLE_VALUE) //если ошибка
{
printf("Failed to create named pipe...");
return(GetLastError());
}
// Подключение
ConnectNamedPipe(
hPipe, // Дескриптор канала
NULL // Перекрытие не используем
);
DWORD lpBuf;
char cName[100];
ZeroMemory(&cName[0],sizeof(cName));
strcpy(&cName[0],"Hello world!");
WriteFile(
hPipe, // Дескриптор канала
&cName, // Указатель на массив записываемых байтов
sizeof(cName), // Куда поместить реально записанное количество
&lpBuf,NULL // Перекрытие не используем
);
DisconnectNamedPipe(hPipe);// разоединение соединения
CloseHandle(hPipe);
return(0);
}
Часть вторая - клиент.
Код:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
int _cdecl main(void)
{
printf("Enter pipe name please:\n");
char pName[100];
char str[100];
char str1[100];
ZeroMemory(
&str1[0],//Указатель на начало блока, который будет обнулен (блок памяти)
300//Указывает длину в байтах блока, который будет обнулен (длина блока памяти)
);
scanf("%s",&str); //выводит на экран
printf("Enter server name please:\n");
scanf("%s",&str1);
strcpy(&pName[0],"\\\\");
strcat(&pName[0],&str1[0]);
strcat(&pName[0],"\\pipe\\");
strcat(&pName[0],&str[0]);
HANDLE hFile = CreateFile(pName,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("Something is wrong...");
return(GetLastError());
}
}