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

Вниз

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 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.03 c
3-1086780618
KADAN
2004-06-09 15:30
2004.07.04
Аналог LIMIT (MySQL) в MSSQL


1-1087538164
AngelSAI
2004-06-18 09:56
2004.07.04
Работа с рисунками


14-1087370201
IceBeerg
2004-06-16 11:16
2004.07.04
2а вопроса


4-1082121116
Orion2
2004-04-16 17:11
2004.07.04
RegisterShellHookWindow


3-1086593173
3APA3A
2004-06-07 11:26
2004.07.04
Есть ли в Paradox е функция now()





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