Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить именованый pipe работать по сети? [D5, NT4, Win2k, WinXP]


sds ©   (2003-11-12 16:22:00) 

В общем суть проблемы такова: создается именованая труба на пролижении-сервере и обменивается данными с клиентом. Если сервер и клиент запущены на одном компе - всё идеально. Если на разных - клиент ругается что он не может такое создать.
Подскажите плиз где может быть ошибка. И возможен ли вообще обмен таким образом по локалке.


sds   (2003-11-17 13:28:00) [1]

Со стороны сервера выглядит вот так:
HWND_pipe := CreateNamedPipe(PChar("\\.\pipe\ContrDocPipe"),
PIPE_ACCESS_DUPLEX, // + FILE_FLAG_OVERLAPPED,
PIPE_TYPE_MESSAGE + PIPE_READMODE_MESSAGE + PIPE_WAIT,
1, //PIPE_UNLIMITED_INSTANCES,
BufOutSize,
BufInSize,
NMPWAIT_USE_DEFAULT_WAIT,
nil);

if HWND_pipe = INVALID_HANDLE_VALUE then begin
ErrorMessage("INVALID_HANDLE_VALUE");
end;


Игорь Шевченко   (2003-11-17 12:54:00) [2]

А со стороны серверного приложения как код выглядит ?


Александр Спелицин   (2003-11-17 12:53:00) [3]

Вместо File_Share_Read + File_Share_Write поставьте 0.
Каналы используются только монопольно, т.е. не допускают совместного использования.


sds   (2003-11-17 12:39:00) [4]

Спасибо что откликнулись
GetLastError выдает то №2 - невозможно создать файл, то №5 - доступ запрешен. На разных машинах по разному. Чаще 2. Это всё при созданни пайпа на клиенте.
Имя у пайпов типа такого "\\.\pipe\ContrDocPipe" - на сервере
"\\полное имя станции сервера\pipe\ContrDocPipe" - на клиенте

пробовал подставлять вместо имени сервера его IP - эффект такой же.

i := 3;
repeat
HWND_pipe := CreateFile(PChar(pipeName),
Generic_Read + Generic_Write,
File_Share_Read + File_Share_Write,
nil,
Open_Existing,
File_Attribute_Normal,
0);
if HWND_pipe <> INVALID_HANDLE_VALUE then begin
break;
end;
LastError;//пишет в лог номер ошибки через GetLastError
dec(i);
until i = 0;

Так он на клиенте создается
Делал всё вроде как в хелпнике написано, не могу понять в чем проблема


Игорь Шевченко   (2003-11-12 17:13:00) [5]


> И возможен ли вообще обмен таким образом по локалке.


Возможен. В Platform SDK демо есть


clickmaker   (2003-11-12 16:55:00) [6]

Какое имя у пайпа? И что GetLastError грит при создании или обмене?


y-soft   (2003-11-12 16:38:00) [7]

Какую ошибку выдает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо