Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.48 MB
Время: 0.048 c
3-1102706621
sloug
2004-12-10 22:23
2005.01.16
Выделение записи в таблице


1-1103885159
Дитё
2004-12-24 13:45
2005.01.16
Можно ли по объекту узнать в каком модуле он объявлен ?


14-1104120730
Чеширский_Кот
2004-12-27 07:12
2005.01.16
"И скучно, и грустно, и некому руку подать..."


1-1104147339
Tack
2004-12-27 14:35
2005.01.16
Главное меню под XP - очень страшное


1-1104405090
AHTuXPuCT
2004-12-30 14:11
2005.01.16
Проблемы с явной загрузкой библиотеки





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