На СЕРВЕРЕ
Piperes = CreateNamedPipeA("\\.\pipe\vbpgpipeSave", PIPE_ACCESS_DUPLEX Or WRITE_DAC, PIPE_TYPE_BYTE, 10, 10, 10, 0, Nothing)
If Piperes = -1 Then MsgBox("ERROR")
На КЛИЕНТЕ
PiperesSave = CreateFileA("\\KKM\pipe\vbpgpipeSave", GENERIC_WRITE, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
Почему PiperesSave =-1????
Re: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Здравствуйте, DD_SSS, Вы писали:
DD_>>Почему PiperesSave =-1????
LT> Почему = GetLastError.
Но, если
На СЕРВЕРЕ
Piperes = CreateNamedPipeA("\\.\pipe\vbpgpipeSave", PIPE_ACCESS_DUPLEX Or WRITE_DAC, PIPE_TYPE_BYTE, 10, 10, 10, 0, Nothing)
If Piperes = -1 Then MsgBox("ERROR")
На КЛИЕНТЕ
PiperesSave = CreateFileA("\\KKM\pipe\vbpgpipeSave", GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
ТО всё ОК.
Re[3]: Обмен данными через Pipes по сети между 2-мя машинами
Извините, конечно, но может объясните мне бестолковому почему у меня не получается обмен данными по сети через pipes.
На локалке все люкс. Канал создается, открывается, записывается, считывается. Как только сервер выношу на машину в сети, то не могу открыть канал на запись (открываю через CreateFileA)
Re[5]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, DD_SSS, Вы писали:
DD_>Извините, конечно, но может объясните мне бестолковому почему у меня не получается обмен данными по сети через pipes. DD_>На локалке все люкс. Канал создается, открывается, записывается, считывается. Как только сервер выношу на машину в сети, то не могу открыть канал на запись (открываю через CreateFileA)
чему равен GetLastError?
пользователи разные на разных машинах?
---
С уважением,
Сергей Мухин
Re[6]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, DD_SSS, Вы писали:
DD_>>Извините, конечно, но может объясните мне бестолковому почему у меня не получается обмен данными по сети через pipes. DD_>>На локалке все люкс. Канал создается, открывается, записывается, считывается. Как только сервер выношу на машину в сети, то не могу открыть канал на запись (открываю через CreateFileA)
СМ>чему равен GetLastError? СМ>пользователи разные на разных машинах?
GetLastError=-1 при CreateFileA("\\ИМЯ_МАШИНЫ_СЕРВЕРА\pipe\vbpgpipeSave", GENERIC_WRITE, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
и
GetLastError=33** (не помню) при CreateFileA("\\ИМЯ_МАШИНЫ_СЕРВЕРА\pipe\vbpgpipeSave", GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
Пользователи действительно разные, хотя оба админы
Re[5]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, DD_SSS, Вы писали:
DD_>Извините, конечно, но может объясните мне бестолковому почему у меня не получается обмен данными по сети через pipes.
Do you speak English? — Канэчно, хачу..
DD_>На локалке все люкс. Канал создается, открывается, записывается, считывается. Как только сервер выношу на машину в сети, то не могу открыть канал на запись (открываю через CreateFileA)
А кто такой nothing? Если оно NULL, то для сети этого может быть маловато.
Можно попробывать открыть для всех — с нулевым DACL, что-то вроде:
{TSecurityDescriptor}if not InitializeSecurityDescriptor(@sd, 1) or
not SetSecurityDescriptorDACL(@sd, true, PACL(nil), False) then
raise Exception.Create('Pipe security failed');
{TSecurityAttributes}
sa.nLength:=SizeOf(sa);
sa.lpSecurityDescriptor:=@sd;
sa.bInheritHandle:= False;
..
CreatePipe( .., @sa);
Ну, а имя ему я б задал большими буквами, не более 8.3 символов,
на всякий пожарный случай (клиент win95).
--
С уважением, LVT
Re[7]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, DD_SSS, Вы писали: DD_>GetLastError=33** (не помню) при CreateFileA("\\ИМЯ_МАШИНЫ_СЕРВЕРА\pipe\vbpgpipeSave", GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
ERROR_LOCK_VIOLATION
DD_>Пользователи действительно разные, хотя оба админы
попробуй под одним пользователем или исп security.
The security descriptor controls access to both client and server ends of the named pipe. If you specify NULL, the named pipe gets a default security descriptor. The ACLs in the default security descriptor for a named pipe grant full control to the LocalSystem account, administrators, and the creator owner. They also grant read access to members of the Everyone group and the anonymous account.
---
С уважением,
Сергей Мухин
Re[8]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, DD_SSS, Вы писали: DD_>>GetLastError=33** (не помню) при CreateFileA("\\ИМЯ_МАШИНЫ_СЕРВЕРА\pipe\vbpgpipeSave", GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
СМ>ERROR_LOCK_VIOLATION
DD_>>Пользователи действительно разные, хотя оба админы
СМ>попробуй под одним пользователем или исп security.
попробовал, все равно "-1". Кстати интересная вещь (раньше не заметил)
при дебуге
в коде CreateFileA("\\ИМЯ_МАШИНЫ_СЕРВЕРА\pipe\vbpgpipeSave", GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) и CreateFileA("\\KKM\pipe\vbpgpipeLoad", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) не проходят(равны -1), а если
в command window, то CreateFileA("\\KKM\pipe\vbpgpipeLoad", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, qwe, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) проходит нормально
если в коде написано:
Re[6]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Здравствуйте, DD_SSS, Вы писали:
DD_>>Извините, конечно, но может объясните мне бестолковому почему у меня не получается обмен данными по сети через pipes.
LT> Do you speak English? — Канэчно, хачу..
DD_>>На локалке все люкс. Канал создается, открывается, записывается, считывается. Как только сервер выношу на машину в сети, то не могу открыть канал на запись (открываю через CreateFileA)
LT> А кто такой nothing? Если оно NULL, то для сети этого может быть маловато. LT> Можно попробывать открыть для всех — с нулевым DACL, что-то вроде:
LT>
LT> {TSecurityDescriptor}
LT> if not InitializeSecurityDescriptor(@sd, 1) or
LT> not SetSecurityDescriptorDACL(@sd, true, PACL(nil), False) then
LT> raise Exception.Create('Pipe security failed');
LT> {TSecurityAttributes}
LT> sa.nLength:=SizeOf(sa);
LT> sa.lpSecurityDescriptor:=@sd;
LT> sa.bInheritHandle:= False;
LT> ..
LT> CreatePipe( .., @sa);
LT>
LT> Ну, а имя ему я б задал большими буквами, не более 8.3 символов, LT> на всякий пожарный случай (клиент win95).
Прошу прощения, но я что-то не догнал какие значения должны быть в nLength и lpSecurityDescriptor
Re[6]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, DD_SSS, Вы писали:
DD_>Прошу прощения, но я что-то не догнал какие значения должны быть в nLength и lpSecurityDescriptor
nLength
Specifies the length, in bytes, of this structure. This value is to be set to the size of the SECURITY_ATTRIBUTES structure.
lpSecurityDescriptor
Points to a security descriptor for the object that controls the sharing of it. If NULL is specified for this member, the object may be assigned the default security descriptor of the calling process.
Без msdn будет нелегко
--
С уважением, LVT
Re[7]: Обмен данными через Pipes по сети между 2-мя машинами
Здравствуйте, DD_SSS, Вы писали:
DD_>Кстати, забыл сказать: открывал файл на СЕРВЕРЕ
.. DD_>Открывается без проблем!
Ну, это, вроде бы, мы уже слышали и даже оному не очень удивились.
Если сервер и клиент пускаются в одной сессии, то прав для доступа
по умолчанию (NULL, nothing, nil, etc) вполне хватает
--
С уважением, LVT
Re: Обмен данными через Pipes по сети между 2-мя машинами