Форум: "Сети";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизИменованные каналы в сети Найти похожие ветки
← →
Ермак © (2004-10-25 22:30) [0]Вот, необходимо создать приложение, где к серверуконнектятся клиенты. При этом, это не штучный продукт, а можно сказать, коммерческий. Пользователь должен его как можно легче поставить и начать работать.
Мне почему-то показалось, что именованные каналы (Named Pipes) - вполне подходящая штука для этого. Реализация проще, чем через сокеты, и не зависит от протокола, требуется знать лишь имя компа, ну и так далее, сами знаете.
Я так думал до сегодняшнего дня, пока не обнаружил, что довольно простенький, тестовый код работает в одной сети и глючит в другой.
Куски кода ниже, а сейчас такой вопрос:
1) Что скажете по поводу именованных каналов, хорошая это штука или нет? Можно все же на ней что-то надежное сделать, или лучше сокеты?
А вот и пример глюка (пардон, что на С++, но суть,надеюсь, уловите):
Сервер:
HANDLE pipe = CreateNamedPipe("\\\\.\\pipe\\screen",PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE,1,1048576,1048576,0,0);
ConnectNamedPipe(pipe,0);
Типа, ждем соединения с клиентом.
Клиент делает вот что:
HANDLE pipe = CreateFile(pipename,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
if( pipe == INVALID_HANDLE_VALUE )
return 0;
---дальнейший код
В одной сети все в порядке, коннект проходит.
В другой - на на клиенте pipe = INVALID_HANDLE_VALUE,
GetLastError дает
231 - ERROR_PIPE_BUSY.
При пошаговой отладке выясняется
самое интересное, что сервер коннект принимает! ConnectNamedPipe возвращает управление, GetLastError = 0, типа, клиент присоединился.
У клиента ставлю
WaitNamedPipe
CrateFile
WaitNamedPipe
- вижу, что и до, и после попытки коннекта труба свободна! Только при коннекте - PIPE_BUSY!
Это еще не самое интерсное.
Пишу:
while( pipe == INVALID_HANDLE_VALUE )
{
pipe = CreateFile(pipename,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
}
Через пару секунд доступ получен!
Но затем при работе с трубой в ней пропадают некоторые данные. Впрочем, насчет этого я не очень уверен, может, это и у меня чего не так.
Что за мистика?
← →
Rouse_ © (2004-10-25 23:04) [1]> При этом, это не штучный продукт, а можно сказать, коммерческий.
Если коммерческий, то на месте твоего начальника, я бы по шапке надавал за такое проектирование...
← →
MC © (2004-10-25 23:06) [2]На самом деле не очень уловил вопрос, разве что могу отослать к литературе:
1. Д. Соломон, М. Руссинович: Внутреннее устройство Windows 2000.
2. MSDN Library
Да, кстати, на сайте лежит статья Шевченко по именованным каналам. Может поможет? Извини, что исходники на Delphi:-)
← →
Ермак © (2004-10-25 23:38) [3]Да, статью Шевченко я читал. Дело не в том, что я не понял, как работать с именованными каналами, а в том, что если один и тот же код по разному работает в разных сетях, вопреки документации, то я бы не стал доверять механизму именованных каналов.
Собсвенно, повторю самый главный вопрос:
можно ли доверять надежности именованных каналов? На однйо машине - понятно, все службы так работают, но в сети? Может, лучше плюнуть и сделать на сокетах?
2Rouse: При чем тут проектирование? С проектированием все ОК, создана библиотека обобщенных шаблонов для работы с любыми таблицами данных, работает отлично ( на локальной машине) и универсальна (если знаешь, что такое шаблоны С++, то поймешь, о чем я).
Для работы с сетью предусмотрен абстрактный класс канала. Настало время реализовать его конкретно. При выборе механизма для работы с сетью я остановился на имен. каналах. Написал простенький код и увидел вышеописанную ерунду. Встает вопрос: а нужны ли они тогда, им. каналы? Стоит ли мне положиться на то, что код сработает в любой сети, и потратить еще неделю, но переделать на сокетах?
← →
Ермак © (2004-10-25 23:44) [4]очепятка: ИЛИ потратить еще неделю
← →
Digitman © (2004-10-26 08:27) [5]
> Через пару секунд доступ получен!
какие протоколы привязаны к сет.интерфейсу в сет.настройках клиента ? кроме NetBIOS ? приведи полный перечень сет.настроек
← →
Rouse_ © (2004-10-26 09:40) [6]ИМХО конечно же переписать на сокеты.
Именованные каналы AFAIK также как и мэйлслоты используют UDP а не гарантирующий доставку TCP.
← →
Rouse_ © (2004-10-26 09:47) [7]Хотя нет, с UDP - это я поторопился...
← →
Ермак © (2004-10-26 09:54) [8]Про протоколы - сразу не скажу, т.к. в той "ненормальной" сети прав админа не имею, и в настройки сети меня винда не пустила.
Знаю только, что сеть смешанная с линуксом, домен поддерживается линуксовым серваком, и все виндовские профили тянутся оттуда.
← →
simpson © (2004-10-26 14:35) [9]Сокеты + TCP, однозначно.
Универсально, не зависит от платформы, на которой реализованы клиент и сервер, ну, и кроме того, учти, что пользователь имеет полое право работать через файрвол.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c