Вниз
Скачать: CL | DM;

Траблы с NamedPipes   Найти похожие ветки 

← →
NetDigger ©   (2004-11-29 14:01) [0]

Здравствуйте, уважаемые! Помогите разобраться с Named Pipes. Сделал простенькую программу - сервер и клиент. Сервер - окно с кнопарем CreateServer и клиент - с двумя Едитами и кнопарями Send и Receive. Запускаю сервер, нажимаю Create, запускаю клиент, набирают в одном Edit"е текст, жму на Send, затем на Receive - виснет клиент. Стоит закрыть сервер, вылетает ошибка(на клиенте), что типа не могу прочесть из канала ( ReadFile возвращает False) - чего только не перепробовал - не получается. Исходники:
Сервер


HP := CreateNamedPipe( "\\.\PIPE\test", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE or PIPE_READMODE_BYTE or
                         PIPE_NOWAIT, 255, 1000*SizeOf(AnsiChar), 1000*SizeOf(AnsiChar), 0, nil );
  If HP = INVALID_HANDLE_VALUE then Begin
     ShowMessage("Cannot create pipe!");
     Halt;
  End;

Клиент

Var
HPipe: Thandle;

procedure TForm1.Button1Click(Sender: TObject);
var
 res: Boolean;
 BytesWrt: DWORD;
 BytesRd: DWORD;
 
 len : DWORD;
begin
 HPipe := CreateFile( "\\.\Pipe\test", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
                      nil, OPEN_EXISTING, 0, 0 );
 If HPipe = INVALID_HANDLE_VALUE then begin
    ShowMessage("Cannot create file!");
    halt;
 End;

 Messag := PAnsiChar(Edit1.Text + #0);
 Len := Length( Messag) * SizeOf(AnsiChar) + 1;

 res := WriteFile( Hpipe, Messag^, Len, BytesWrt, nil );
 If not(res) then Begin
   ShowMessage("Cannot write to pipe!");
   halt;
 End;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
 res: Boolean;
 BytesRd: DWORD;
 InBuf: Array[0..512] of AnsiChar;
Begin

InBuf[0] := #0;
 Res := ReadFile( hPipe, InBuf, 512, BytesRd, nil );
 If not(res) then Begin
   ShowMessage("Cannot read from pipe!");
   halt;
 End
 Else
   ShowMessage( StrPas( InBuf ) );

 closeHandle( HPipe );

end;


← →
Digitman ©   (2004-11-29 15:39) [1]


> кнопарем


дурацкий доморощенный жаргон придает уверенности ?


> Сервер


ну и где же у тебя вызов ф-ции ConnectNamedPipe() ?


← →
NetDigger ©   (2004-11-29 15:52) [2]

Хех, ну может с жаргоном и переборщил...
Пробовал и так - результат аналогичен


← →
Digitman ©   (2004-11-30 08:11) [3]


> NetDigger ©   (29.11.04 15:52) [2]


загляни в "Статьи", там есть пример использования пайпов



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
1-1103923596
Drema
2004-12-25 00:26
2005.01.16
вывод информации


1-1104150683
lm2
2004-12-27 15:31
2005.01.16
TService + запуск программы


1-1103885159
Дитё
2004-12-24 13:45
2005.01.16
Можно ли по объекту узнать в каком модуле он объявлен ?


1-1104322050
DimonNew
2004-12-29 15:07
2005.01.16
DBGrid и выделять строчку


14-1104347648
Vasya.ru
2004-12-29 22:14
2005.01.16
Срочно нужна консультация




   Наверх