Страница: 1 | 2 | 3 |
Вопрос: Исползование 2 Winsock-а в один порт.
Добавлено: 05.03.06 21:20
Автор вопроса: Programmer
Ответы
Всего ответов: 43
Номер ответа: 16
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #16
Добавлено: 23.03.06 12:54
Не совсем то. Читаем
Как мне коннектитца в один порт одновременно
разными программами.
Смысл в том чтобы посадить два полноценных винсока на один порт.
Номер ответа: 17
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #17
Добавлено: 23.03.06 13:06
Думаю при
Номер ответа: 18
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #18
Добавлено: 23.03.06 13:24
Может да, а может и нет...
Скажем, два своих приложения ты так разрулить не можешь. Про UDP вообще молчу. А про коннекты и ежу понятно.
Номер ответа: 19
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #19
Добавлено: 23.03.06 14:34
Mihalыch дело говорит. Если по большому счёту о Winsock'ах говорить, как о сокетах Windows, а не о контроле от Microsoft, то сервер не может одним сокетом поиметь соединение с несколькими сокетами клиентов На web-сервере только один (!) сокет привязан (bind) к порту 80, а когда он принимает соединение (accept), эта api-функция создает (и возвращает) новый сокет, который и принимает соединение от клиента. При этом вновь созданный сокет никоим образом не привязан к 80-му порту, разве что он был создан при участии первого сокета. Если по каким-то причинам в программе вы не успеваете принимать соединения клиентов, образуется что-то типа очереди на подключении. Для winsock v1 эта очередь не больше 5 клиентов, для winsock v2 можно гораздо больше. Всё выше сказанное касается windows sockets api.
Номер ответа: 20
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #20
Добавлено: 23.03.06 14:38
Есть в разделе примеры две версии сервера многоканального винсока, обе я когда-то дорабатывал под свои нужды, советую скачать и основательно разобраться. Там то, что сказал Mihalыch, на примере Winsock Control'ов.
Номер ответа: 21
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #21
Добавлено: 23.03.06 14:59
Все это здорово, но если порт 80 ЗАНЯТ - хоть 800-канальный винсок у тебя будет - на Winsock Control он работать не будет. Вот в чем фишка...
Номер ответа: 22
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #22
Добавлено: 23.03.06 15:17
Чем 80-й порт может быть занят? Разве что очередью ожидающих на подключение. Если он занят ты никаким макаром ни байта с сервера не получишь. Winsock-control тут ни при чем! Если разработчик сервера по 80-му данные пересылает (и поэтому он занят), то он не разработчик, а.. не умный человек.
Номер ответа: 23
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #23
Добавлено: 23.03.06 15:25
Чем 80-й порт может быть занят?
80-й порт - частный случай.
Если он занят ты никаким макаром ни байта с сервера не получишь.
Про то и речь что это не есть факт.
А порт может быть, скажем 4662 или 8132. На вещи надо смотреть ширше
Номер ответа: 24
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #24
Добавлено: 23.03.06 15:45
LoL, знаешь, мне кажется я по существу. А разбираем мы не общий случай, а частный, в данном случае случай programmer'a. А про XP-это частный случай и я не знаю, что ты этим хотел сказать. Web-server - это как доступный для понимания ПРИМЕР, а не частный случай. Автор топика пишет:
один порт скачивать одновременно
много файлов. То есть одновременно
происходит много коннектов через порт 80.
В моей проге так не выходит. Порт занят.
То есть здесь речь о том, что человеку надо чтобы коннектиться к серверу можно было как и в интернете - одновременно идёт передача данных с НЕСКОЛЬКИХ портов, но ни один из них реально не является портом, номер которого прослушивается. Просто в прослушивающий порт поступают запросы на соединение, а сами соединения проходят не с ним, а с другими сокетами на других портах. Автору топика надо сделать так, чтобы прослушивающий порт никогда не был занят "делами", кроме как принимать очередь из запросов на соединение. В чём конкретно ты со мной не согласен, LoL?
Номер ответа: 25
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #25
Добавлено: 23.03.06 15:51
Ну я сказал Что я имел ввиду, вы поняли: ни один из них не является тем портом, который прослушивали.
Номер ответа: 26
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #26
Добавлено: 23.03.06 15:55
Ну я же уже писал - пост N16.
Я с тобой согласен - для приведенной аффтаром ситуации этот медод приемлем. Проблемы возникнут при реализации собсно сабжа. Название темы вверху.
Ну а если имеется одна лишь программа, типа браузера - тут и спорить не о чем, только так и никак иначе
Номер ответа: 27
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #27
Добавлено: 23.03.06 16:23
то, что в сабже написано, реалировать можно, но это через задницу и никто так не делает. тогда это будет попеременное пользование одним портом несколькими программами.. по таймауту, что-ли )))) проги-клиенты будут получать 99% отказов, снова долбиться на порт, после чего на короткий интервал времени им дадут прокачать все или часть(!) того, что надо.
Номер ответа: 28
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #28
Добавлено: 23.03.06 16:26
нужна многоканальная закачка - не жалейте открытых сокетов. это единственный путь - других нет.
Номер ответа: 29
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #29
Добавлено: 23.03.06 16:45
Одна прога вполне может использоваться для отсылки данных, другая - для приема. Если протокол UDP - проги могут просто слушать порт.
Вариантов тут много, и не сказать что никто так не делает
Номер ответа: 30
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #30
Добавлено: 23.03.06 19:45
Люди, вы не так поняли!
Я имею в виду, что у меня клиент, а не сэрвер. С сэрвером проблем никаких. Bind, Accert, Listen - это все я знаю. Меня интересует:
У меня КЛИЕНТ, а не сэрвер!
Я хочу Connect, а не Listen!!!
Я хочу несколькими потоками одноврименно соединятся с сэрвером и качать.