Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

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

 
DoG ©   (2004-05-21 17:51) [0]

Здр !

У меня вот какая проблема !
Есть сервер там я создаю пайп CreateNamedPipe
И клиент там я этот пайп читаю

Как, прочитать этот же пайп на сервере, т.е. там же где он был создан ?
Вот так вот не получается.

   if ReadFile(hPipe, ReadBuf, sizeof(ReadBuf), dd, nil) then
   begin
     st := ReadBuf;
     ListBox2.Items.Add(st);
   end;


 
Black Krok   (2004-05-21 18:12) [1]

Надо вроде так:

if ReadFile(hPipe, ReadBuf[1], sizeof(ReadBuf), dd, nil) then

а ReadBuf описано очевидно как:
ReadBuf : string[X];
????


 
DoG ©   (2004-05-21 19:33) [2]

СЕРВЕР:

function ReadPipe(params : dword): dword; stdcall;
var
 ReadBuf: array [0..255] of Char;
 st,st1: string;
 dd : Dword;
 i,j : integer;
begin

 ZeroMemory(@ReadBuf, SizeOf(ReadBuf));

 while true do
   if ReadFile(hPipe, ReadBuf, sizeof(ReadBuf), dd, nil) then
   begin
     st := ReadBuf;
     form1.ListBox2.Items.Add(st);
   end;
   sleep(100);
 end;
end;

function WritePipe(void: pointer): dword; stdcall;
var
  ReadBuf : array[0..255] of Char;
  i : integer;
  st : string;
  dd : dword;
begin
 while true do begin
  if ConnectNamedPipe(hPipe,nil) then
    while true do begin
      sleep(100);

      if  struct then begin
        ZeroMemory(@ReadBuf,SIZEOF(ReadBuf));
        st:="$" ;
        for i:=0 to Form1.ListBox1.Items.Count-1 do
            st := st+Form1.ListBox1.Items[i]+"$";
        for i:=1 to Length(st) do ReadBuf[i-1] := st[i];
          OemToChar(ReadBuf, ReadBuf);
          WriteFile(hPipe,ReadBuf,sizeof(ReadBuf),lpBuf,nil);
          struct := false;
          con:= true;
      end;

    end;
   sleep(100);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
st: String ;
begin
 st := "\\"+Edit1.Text+"\pipe\pipename";
 hPipe := CreateNamedPipe(PChar(st),PIPE_ACCESS_DUPLEX or WRITE_DAC,PIPE_TYPE_Byte or PIPE_READMODE_Byte or PIPE_WAIT ,PIPE_UNLIMITED_INSTANCES,255,255,NMPWAIT_USE_DEFAULT_WAIT,Nil);
 if hPipe=INVALID_HANDLE_VALUE then
   ShowMessage("Error: "+SysErrorMessage(GetLastError))
     else lbStat.Caption := "Connect";

 HNDwp := CreateThread(nil,0,@WritePipe,nil,0,IDw);
 HNDrp := CreateThread(nil,0,@ReadPipe, nil ,0,IDr);

end;

КЛИЕНТ:

function ReadPipe(params : dword): dword; stdcall;
var
 ReadBuf: array [0..255] of Char;
 st,st1: string;
 dd : Dword;
 i,j : integer;
begin

 ZeroMemory(@ReadBuf, SizeOf(ReadBuf));
 while true do
 begin
   if (ReadFile(params, ReadBuf, sizeof(ReadBuf), dd, nil)) then
   begin

     st := ReadBuf;
     if st[1]="$" then begin   // ÏÐÈÅÌ ÑÒÐÓÊÒÓÐÛ ÔÀÉËÎÂ
       i:=0; j:=0;
       Form1.List1.Clear;
       for i:=1 to Length(st) do
         if (st[i]="$") and (Length(st)<>i) then begin
           j:=i+1;
           st1:="";
           repeat
            st1 := st1 + st[j]   ;
            inc(j);
           until st[j]="$";
           Form1.List1.Items.Add(st1);
         end;
     end;
                    st := "hello";
        for i:=1 to Length(st) do ReadBuf[i-1] := st[i];
          OemToChar(ReadBuf, ReadBuf);
          WriteFile(hPipe,ReadBuf,sizeof(ReadBuf),lpBuf,nil);

   end;
   sleep(100);
 end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
st: string;
begin
 st := "\\"+Edit1.Text +"\pipe\pipename" ;
 hFile := CreateFile(PChar(st) , GENERIC_READ , FILE_SHARE_READ, Nil ,CREATE_NEW  , FILE_ATTRIBUTE_NORMAL , 0);
 if hFile=INVALID_HANDLE_VALUE then
   ShowMessage("Error: "+SysErrorMessage(GetLastError))
    else lbStat.Caption := "Connect";

 HNDrp := CreateThread(nil,0,@ReadPipe, pointer(hFile) ,0,IDr);

end;

Вначале сервак отправляет строку клиенту, тот принимает (ето работает), потом он должен отправить серваку HEllo а тот должен принять, вот тут что то не работает ! или не отправляет или не принимает или то и другое.

Причем при таком раскладе сервак отказывается отправлять строку, а вот если убрать у сервака нить на чтение то он все отправляет,
вот почему так ? и как сделать что бы можно было передавать в обе стороны ?


 
LMD ©   (2004-05-21 21:10) [3]

В разделе "статьи" есть статья про пайпы.

Удачи!


 
DoG ©   (2004-05-21 21:30) [4]

что то я не нашел там такойс статьи ! Хоть как называется !
А че тут вобще у меня лес что ли?, на глаз то не видно где бага зарыта ?


 
LMD ©   (2004-05-21 21:37) [5]


> Хоть как называется !


Что такое Named Pipes и как с ними бороться.

Удачи!


 
DoG ©   (2004-05-21 21:49) [6]

Я нашел эту статью, прочитал...легче мне не стало !
Слушай LMD а ты че не видешь умя здесь ни какой баги ?


 
LMD ©   (2004-05-21 22:19) [7]


> а ты че не видешь умя здесь ни какой баги ?


Вижу целых две, первая: Ты не проверяешь результат операций и не видишь, где и почему происходит ошибка.
вторая: ты не дружишь с русским языком. Извини, хочешь нормального обсуждения, пиша грамотно.



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

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
4-1085326078
solo
2004-05-23 19:27
2004.07.04
Путь в формате 8.3 в коммандной строке


14-1087454723
ИМХО
2004-06-17 10:45
2004.07.04
Здесь когда-нибудь порядок будет


14-1086964674
sniknik
2004-06-11 18:37
2004.07.04
Комп отказывается работать. Что смотреть в первую очередь?


1-1087481169
p_sA[11]
2004-06-17 18:06
2004.07.04
Реестр: Как прочитать все имена ключей в нужном мне разделе?


3-1086695303
white
2004-06-08 15:48
2004.07.04
Посоветуйте какой компонент подойдёт...