• sargast © (11.05.08 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 © (11.05.08 12:52) [1]
    Читай статью Игоря Шевченко про. здесь
    http://www.delphimaster.ru/articles/named_pipes/index.html
  • Сергей М. © (11.05.08 21:01) [2]

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


    Точно так же как это делает клиент - WriteFile
Есть новые Нет новых   [134433   +22][b:0][p:0.003]