Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];

Вниз

Pipe   Найти похожие ветки 

 
sargast ©   (2008-05-11 00:53) [0]

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

Сервер

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;


 
Cj ©   (2008-05-11 12:52) [1]

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


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


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


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



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
8-1194463264
Алексей
2007-11-07 22:21
2009.05.31
Анимационный вывод изображения


2-1240272203
truefalse
2009-04-21 04:03
2009.05.31
Прога пропала из Taskbar, но в дисп. заданий есть->куда смотреть?


2-1240142326
Получатель
2009-04-19 15:58
2009.05.31
Получить записи столбца TDbf


2-1240130471
Inko
2009-04-19 12:41
2009.05.31
Вопрос по StringGrid


2-1240226221
VMF
2009-04-20 15:17
2009.05.31
DLL в C++ для Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский