Главная страница
    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.007 c
15-1238103365
Юрий
2009-03-27 00:36
2009.05.31
С днем рождения ! 27 марта 2009 пятница


10-1158130464
GrBob
2006-09-13 10:54
2009.05.31
ITypeInfo и имя интерфейса-предка.


8-1194437854
zvukoff
2007-11-07 15:17
2009.05.31
как снять звук с микрофона и тут же его выводить на колонки


15-1234785296
Василий Жогарев
2009-02-16 14:54
2009.05.31
MSQ SQL Server 2005


2-1239705942
andrew727
2009-04-14 14:45
2009.05.31
Экспорт данных из таблицы БД Access в массив





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский