Главная страница
    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.032 c
4-1085384190
mutabor
2004-05-24 11:36
2004.07.04
завершение работы windows


1-1087286985
Konstantin
2004-06-15 12:09
2004.07.04
Помогите пожалуйста сохранить настройки программы


14-1087192062
ИМХО
2004-06-14 09:47
2004.07.04
Что за фигня...


14-1087308451
Piter
2004-06-15 18:07
2004.07.04
Открытие URL в браузере в новом окне


14-1087302836
Кулюкин Олег
2004-06-15 16:33
2004.07.04
Кто пользовался для переезда компаниями-перевозчиками?





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