Форум: "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