Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pipe


sargast ©   (2008-05-11 00:53:00) 

Здравствуйте.
Написал сервер и клиент, работающие через именованные каналы. Все работает, сообщения от клиента к серверу доходят. Теперь нужно сделать так, чтобы при получении сообщения сервер отсылал ответ клиенту, типо сообщение дошло. Как это можно сделать?

Сервер

VAR
 PipeHandle:THANDLE;
 BytesRead:DWORD;
 buffer:Array [1..80]of char;
begin
  PipeHandle:= CreateNamedPipe('\\.\Pipe\Jim', PIPE_ACCESS_DUPLEX,
               PIPE_TYPE_BYTE or PIPE_READMODE_BYTE, 1,0, 0, 1000, Nil);
if PipeHandle= INVALID_HANDLE_VALUE then
begin
 ShowMessageFmt('Ошибка %d при создании именованного канала',
  [GetLastError]);
 exit;
end;
ShowMessage('Сервер работает');
if ConnectNamedPipe(PipeHandle, Nil) = False then
begin
   ShowMessageFmt('Ошибка %d при соединении по именованному каналу',
  [GetLastError]);
     CloseHandle(PipeHandle);
   exit;
end;
if ReadFile(PipeHandle, buffer, sizeof(buffer),BytesRead, nil)=False then
begin
  ShowMessageFmt('Ошибка %d при чтении данных', [GetLastError]);
     CloseHandle(PipeHandle);
  exit;
end;
ShowMessage(buffer);
if DisconnectNamedPipe(PipeHandle) = False then
begin
  ShowMessageFmt('Ошибка %d при закрытии канала', [GetLastError]);
  exit;
end;
CloseHandle(PipeHandle);
end;


Клиент
CONST
  PIPE_NAME= '\\.\Pipe\Jim';
VAR
  PipeHandle:THANDLE;
  BytesWritten:DWORD;
begin
   if WaitNamedPipe(PIPE_NAME, NMPWAIT_WAIT_FOREVER) = False then
   begin
     ShowMessageFmt('Функция WaitNamedPipe завершена с ошибкой %d',[GetLastError]);
     exit;
   end;
   // Открытие экземпляра именованного канала
   PipeHandle:=CreateFile(PIPE_NAME,GENERIC_READ or GENERIC_WRITE, 0,
   Nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
   if PipeHandle= INVALID_HANDLE_VALUE then
   begin
     ShowMessageFmt('Функция CreateFile завершена с ошибкой %d', [GetLastError]);
     exit;
   end;
   if WriteFile(PipeHandle,'This is a test',14, BytesWritten,Nil) = False then
   begin
     ShowMessageFmt('WriteFile failed with error %d', [GetLastError]);
     CloseHandle(PipeHandle);
     exit;
   end;
   ShowMessageFmt('Передано %d байт', [BytesWritten]);
   CloseHandle(PipeHandle);
end;


Сергей М.   (2008-05-11 21:01:00) [1]


> Как это можно сделать?


Точно так же как это делает клиент - WriteFile


Cj   (2008-05-11 12:52:00) [2]

Читай статью Игоря Шевченко про. здесь
http://www.delphimaster.ru/articles/named_pipes/index.html


Наверх

Титульная страница Поиск, карта сайта Написать письмо