powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Динамическое назначение портов сокетам.
21 сообщений из 21, страница 1 из 1
Динамическое назначение портов сокетам.
    #39402846
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заморочился связью между прогами на одном компе - вроде сокеты самое оно. У клиентов можно динамически назначить порты, но как это сделать что-то не ищется.
Наверное и у сервера это можно сделать и обращаться к нему по имени, первый раз, и получить от него номер порта. Как номер порта сервера получить - это понятно. А вот как к нему по имени обратиться?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39402876
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAвроде сокеты самое оно
Не самое. Я бы использовал WCF с биндингом через named pipes.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403032
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНе самое. Я бы использовал WCF с биндингом через named pipes.Если вспомнить, пайпес в Виндовс пришли из старого Юникс. Юникс от них отказался в пользу сокетов. Один из протоколов сокетов Юникс чисто локальный, т.е. чисто для взаимодействия в рамках одной машины, в обход многих надстроек над сокетами для связи по сети. Если не ошибаюсь, в Линукс сокеты уже изначально даже на уровне ядра.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403037
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAЕсли не ошибаюсь, в Линукс сокеты уже изначально даже на уровне ядра.
а где иначе?
а в винде и http давно на уровне ядра
YUBAЮникс от них отказался в пользу сокетов.
кто отказался?
всю жизнь именованые каналы в *никсах реализовывались как Unix domain sockets
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403043
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилкто отказался?
всю жизнь именованые каналы в *никсах реализовывались как Unix domain socketsЛадно. Но, поговаривают, что pipes в Виндах не оч. надежны. Вообще у них действительно есть определенные недостатки. В частности, по интерфейсам.
Лучше подинамическим портам.) Как в NET динамически получить порт для клиента, а лучше и для сервера тоже? Ну и обращений по имени, а не по IP:Port.
Посмотрел на компе - там порты и 52000 используется, и в районе 12000 тоже. Пересекаться не хочется, лучше динамически.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403052
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAНо, поговаривают, что pipes в Виндах не оч. надежны
разработчики MSSQL видимо не в курсе ))

динамический порт у сервера получить не проблема просто 0 в бинд передать

передать номер клиенту - можно например в registry записать
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403054
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAЗаморочился связью между прогами на одном компе - вроде сокеты самое оно.
Как я с этим всем намучился в свое время.
Каждый к чему-то привык это ясно.
Имхо, самое оно это mailslot-ы с придуманными тобой уникальными именами. Нужно общение в 2 стороны - значит в каждой проге по mailslot - и общение по независимым "каналам". Положил msg и забыл.
Еще можно слать SendMessage (COPYDATA) между окнами - но в большинстве случаев неудобно, надо ждать обработки на другой стороне и не работает если NT Service <> User , от этого почти отказался.
Пайпы - зло.
Named Shared Memory - вроде тоже неплохо для определенных целей - как счас выяснил.
Events -тоже хорошо, если просто "стукануть".
И лучше сразу все эти вещи через API делать.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403082
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Имхо, самое оно это mailslot-ы с придуманными тобой уникальными именами. Нужно общение в 2 стороны - значит в каждой проге по mailslot - и общение по независимым "каналам". Положил msg и забыл.
Еще можно слать SendMessage (COPYDATA) между окнами - но в большинстве случаев неудобно, надо ждать обработки на другой стороне и не работает если NT Service <> User , от этого почти отказался.
Пайпы - зло.
Named Shared Memory - вроде тоже неплохо для определенных целей - как счас выяснил.
Events -тоже хорошо, если просто "стукануть".
И лучше сразу все эти вещи через API делать.
API, безусловно, самое милое дело.)) Но когда оно ANSI C, в шарп не больно то мигрируешь. Я уже танцевал с бубном - не вариант.
mailslot - не знаю, не юзал. Посмотрю что за зверь, но, имхо, медленно.
Посмотрел тесты, простенький AF_UNIX односокетовый сервер -клиент обеспечивают >2000 запросов/с. Если учесть, что сервер-сокеты еще могут и размножаться как тараканы, то, наверное, самое оно.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403086
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAAPI, безусловно, самое милое дело.)) Но когда оно ANSI C, в шарп не больно то мигрируешь. Я уже танцевал с бубном - не вариант.
с чем не справился?
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403089
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилс чем не справился?Несколько h-файлов в с# - эт не для белого человека.))
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403103
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAНо когда оно ANSI C, в шарп не больно то мигрируешь.
Во первых, не обязательно ANSI (functionA), но где это надо всегда дублируется Unicode (functionW).
И если например в VB6 я исторически почти всегда использовал ANSI (functionA), то в .Net стал строго придерживаться Unicode (functionW).

Во вторых, независимо от того используешь ты A или W сообщение что ты передаешь может быть в любой кодировке, да хоть бы UTF8 которая "родная" для .Net, ф-ций WriteFile и ReadFile и т.п. A/W кстати не существует, речь обычно идет о массиве байтов, а как ты это кодируешь/декодируешь твое личное дело (штатных инструментов кодирования в .Net на эту тему хватает), главное чтобы оба конца адекватно понимали в какой одной кодировке они работают. Например в случае если у меня 2 .Net приложения, я использую utf8, а если одно из приложений C/C++ то тут уж кодирую ANSI либо Unicode==UTF16 в зависимости от того скомпилировано ли си в Юникоде или ANSI. Но в только что осиленном примере с Named Shared Memory
20204881 (под спойлером готовый модуль) почему-то использовал Encoding.Unicode хотя у меня 2 .Net приложения - почему-то так захотелось, видимо из соображений что это может пригодиться для пары C/C++ <> .Net. Хотя объясню, только недавно напоролся, все ф-ции для Mailslot у меня были заточены под ANSI и utf8, а сейчас мне понадобилась пара C++(Unicode) <> .Net, и мне эти ф-ции пришлось дублировать для Unicode.

YUBAНесколько h-файлов в с# - эт не для белого человека.))
Вообще-то API ф-ции в .Net как и в VB6 декларируются ручками с четким указанием системных dll, в отличии от C, где включаешь h. файлы заголовков из всяких там SDK/DDK (что кстати часто приводит к конфликтам из-за многообразия версий этих самых SDK/DDK, тасовать include/src ссылки в свойствах C++ проекта - особенно чужого и большого, оч. неблагодарное дело). И вот пока делаешь (в .Net/VB6) эту "черную" работу, выписывая ручками все эти Declare, константы и структуры, параллельно читая документацию, начинаешь эти самые API оч. хорошо понимать и становишься "белым" человеком.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403119
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77YUBAНо когда оно ANSI C, в шарп не больно то мигрируешь.
Во первых, не обязательно ANSI (functionA), но где это надо всегда дублируется Unicode (functionW).
И если например в VB6 я исторически почти всегда использовал ANSI (functionA), то в .Net стал строго придерживаться Unicode (functionW).
Я не имел в виду перекодировку символов.

Дмитрий77И вот пока делаешь (в .Net/VB6) эту "черную" работу, выписывая ручками все эти Declare, константы и структуры, параллельно читая документацию, начинаешь эти самые API оч. хорошо понимать и становишься "белым" человеком.Мне оно просто не надо. В СРР ДЛЛ вошел, данные получил/отправил в С# и все. А в Шарпах хоть обобрабатывайся.
А о конфликтах - лишних хидеров не цепляй и будет счастье.))
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403120
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИзопропилс чем не справился?Несколько h-файлов в с# - эт не для белого человека.))на http://pinvoke.net достаточно прототипов для начал работы
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403124
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

С ddk/wdk что нибудь собирал?
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403136
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилна http://pinvoke.net достаточно прототипов для начал работыЗа атериал спасибо, может когда пригодится. Но Здесь совсем другое. Проще кусок в ДЛЛ на СРР сделать и уйти в приложение.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403137
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилYUBA,
С ddk/wdk что нибудь собирал?Нет. Лет 7-8 к СРР вообще не подходил, без надобности было. Недавно приперло.))
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403140
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS Вообще, ДЛЛ я уже, можно считать, сделал - работает. Потому и тема по сокетам.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403141
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилна http://pinvoke.net достаточно прототипов для начал работы
Я вот лично туда посматриваю, но за чистую монету никогда не беру.
Очень любят там всякие U Int32 прописывать и <DllImport в стиле C# писать, что как раз не сильно надо и Int32 обычно везде хватает.
А вот с IntPtr и (U)Int32 там как раз часто путаница, а вот это как раз на x64 очень даже стреляет, и лучше себе таких мин изначально не закладывать. Поэтому предпочитаю выписывать ручками и пережевывая каждый параметр, глядя больше в MSDN (Windows) а не в pinvoke.
Еще на счет IntPtr / ByRef <structure> обычно думать приходится, потому как в разных случаях по разному удобней (пятиэтажная <structure> возможно никогда и не понадобится).
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403143
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Я же сразу уточнил - прототипы
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403175
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныYUBAвроде сокеты самое оно
Не самое. Я бы использовал WCF с биндингом через named pipes.
Согласен, WCF самая удачная "фундаментальность" в .net (две прочие - WPF и почившее WF). Но почему "named pipes"? Я бы использовал WCF/tcp/duplex(CallbackContract) - ведь проги на одном компе сегодня - это проги на разных компах завтра. Иначе эти проги должны быть слиты в одну прогу.

P.S. Замечание исключительно для Сна В.П.
...
Рейтинг: 0 / 0
Динамическое назначение портов сокетам.
    #39403199
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAКак в NET динамически получить порт для клиента, а лучше и для сервера тоже? Ну и обращений по имени, а не по IP:Port.
Посмотрел на компе - там порты и 52000 используется, и в районе 12000 тоже. Пересекаться не хочется, лучше динамически.
Не понял зачем тебе имена? Внутри компа достаточно 127.0.0.1 или "localhost" если очень хочется имен.

Для для сервера открываешь 127.0.0.1:0, виндовс выдаст свободный порт, на него клиентом цепляться.
Код: c#
1.
2.
3.
TcpListener tcpListener =  new TcpListener(IPAddress.Parse("127.0.0.1"), 0);    
tcpListener.Start();
Console.WriteLine(tcpListener.LocalEndpoint.ToString());
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Динамическое назначение портов сокетам.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]