Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: WinSocks Добавлено: 26.06.06 19:58  

Автор вопроса:  Sneaks
помагиту новичку, нашел пример работы WinSocks, он через UPD, и соединяется тока с одним компом. Как сделать что бы он рассылал сразу нескольким и получал от них пакеты?

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #1 Добавлено: 27.06.06 11:00
1. Не UPD, а UDP.
2. Broadcast, Multicast.
3. В UDP протоколе нет такого понятия как "соединение".

Ответить

Номер ответа: 2
Автор ответа:
 AsHeS



ICQ: 229759992 

Вопросов: 14
Ответов: 93
 Профиль | | #2 Добавлено: 28.06.06 12:37
Думаю тебе сначала надо понять разницу между TCP/IP и UDP.
TCP/IP это "прямое" соединение 2 компьютеров. Тоесть обмен пакетами происходит токо после установления соединения. Соотвественно когда соединение установленно 3 компьютер не может соединиться с сервером так как порт занят. Как вариант использование масивов винсоков. Фактчески на 1 порте много сокетов.
в UDP непосредственного соединения не происходит. Пакет посылается и слежение дошел он или нет не ведется. Как только пакет отправлен сокет переводится в режим прослушивания и может быть принята информация.

Ответить

Номер ответа: 3
Автор ответа:
 AsHeS



ICQ: 229759992 

Вопросов: 14
Ответов: 93
 Профиль | | #3 Добавлено: 28.06.06 12:38
Могу сказать что лично для меня использование протокола UDP представляется слишком неудобным. Отправив пакет ты точно никак не узнаешь дошел он или нет. Для начала рекомендую разобраться с TCP/IP - он попроще

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 28.06.06 15:10
Отправив пакет ты точно никак не узнаешь дошел он или нет


а моё имхо - это не актуально. Т.к. что при TCP/IP нужно самому проверку делать (отсылать сообщение что мол всё ок - принял) что при udp... Неудобство лишь в том что в udp оно всем сразу зайдёт, но можно в само сообщение поместить данные о том для кого назначено сообщение, и тот для кого назначено - отреагирует на него.

Почему всёравно нужна провера? ну udp не комментирую...

А tcp/ip... Если данные идут постоянно - потоково, передача файла например, то может и не нужна... а если что-то вроде чата, или другого сервера который не интенсивно нагружает сокет, то получается вот как...

2 сокета, 1 слушает (сервер)- второй отправляет (клиент). Теперь представим что сервер не закрыл соединение (winsock.close или хотябы по нормальному процесс вырубить End or WM_CLOSE etc..) а тупо оборвался... - процесс убили, или в сетке оборвался (вытянули) кабель... Думаешь клиент если просто подключен был в порт (ничего не отправлял) сразу заметит что сервак пропал? Зря ты так думаешь, там таймаут чё-то ~ сек 30 а то и больше... и вообще не всегда этот таймацт почему-то наступает... Относительно клиента - тоже самое. Если сервак резко упадёт, и в этот момент он ничего не отправлял - клиент х.з. заметит что сервера нет... заметит только когда попробует что-то отправить, или по долгому и нудному таймауту... В итоге при простом зависании на порту, и в tcp/ip надо серверу и клиенту 1 раз в пару сек кидать друг другу хоть по 1 байту...

От зайди в инет, подключись к асе, потом на фаерволе запрети всё. Через сколько времни отреагирует ася что нет соединения с icq сервером? Незнаю как там в ICQ 5, она траф любит жрать, она может и травит тестовые сообщение кажые n сек, но гораздо экономние rq or qip, вот они по умолчанию не шлют эти тестовые (хотя можно настроить), и пока они не пошлёт это тестовое (или не тестовое а твоё сообщение) они фиг заметят что фаер блокирует их трафф.

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 28.06.06 18:02
Хм... А кто тебе сказал что по UDP пакет придет всем? Кому пошлешь - тому и придет. Ну ежели, конечно, слать в бродкаст - тада да :)
ЗЫ Еще и от маршрутеризатора зависит. Старые хабы тупо слали пакет на все свои порты, а там уж клиенты сами разбирали.

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 28.06.06 21:13
ну я ж незнаю, управляемые у него там хабы, свичи всмысле...

Ответить

Номер ответа: 7
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #7
Добавлено: 28.06.06 21:24
Делаете размер буфера для отправки равным нулю и TCP становится реально гарантирующим доставку протоколом (так сказать с уведомлением о том что не доставил) - только если сетка слабая, то send может подвисать малость (драйвер не отпускает поток,, пока не убедится, что всё тип-топ), поэтому надо выделять всё в отдельный от gui поток.

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 28.06.06 21:38
Ну допустим сделали, буфер 0...
Соединились... ничего не делаем... и тут бац! :) один конец оборвался. Через сколько отрегарует программа, что другой конец не отвечает?

Ответить

Номер ответа: 9
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #9
Добавлено: 28.06.06 21:38
2Hacker: перечитал твой пост, я так понял, что ты ещё не в курсе, что tcp с буфером больше нуля может даже отсылать пакеты в "никуда"? :)
Соедини два сокета на разных компах через свитч. Потом вытащи патчкорд из одного - на нём сразу произойдёт (по крайней мере у меня происходило сразу) событие дисконнекта. А второй, не отключённый от свитча, комп будет УСПЕШНО продолжать отсылать данные драйверу до тех пор, пока не начнутся реальные попытки доставить данные и не наступит облом. И только потом тебе об этом скажут, чтобы ты мучался вопросом, что же из того, что ты отсылал дошло, а что нет. Хе-хе, особенно смешно, если это банковские транзакции. :))))

Ответить

Номер ответа: 10
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #10
Добавлено: 28.06.06 21:42
Соединились... ничего не делаем... и тут бац! :) один конец оборвался. Через сколько отрегарует программа, что другой конец не отвечает?

Ах ты об этом!
Просто забудь о том, что у сокетов есть событие дисконнекта и всё. Очень просто. Автопроверка соединения происходит через время установленное в опции keepalive (по-моему), которая общая для всех сокетов в системе и по умолчанию равно... ммм... не то 20 минут, не то 2 часа.

Ответить

Номер ответа: 11
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 29.06.06 01:42
Та я то в курсе, от этого и говорю что немешало бы тестовые пакеты и при tcp слать, как и при udp

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 29.06.06 01:45
p.s. и кстати, чтобы проверить, совсем ненужно соединять через свич сокеты... Просто открыть порт и самому к 127.0.0.1 к себе же и подключится на него... Потом убить один из процессов, и долго ждать, в надежде что твоя прога матюкнётся... )))

Ответить

Номер ответа: 13
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #13
Добавлено: 29.06.06 09:23
Если на своём компе, то прога матюкнётся, когда ты попытаешся что-то послать (а большего и не надо). А через свитч - нет.
Можно также через VMWare.

Та я то в курсе, от этого и говорю что немешало бы тестовые пакеты и при tcp слать, как и при udp

А доставку тестовых пакетов чем проверять? Ещё одними тестовыми пакетами?
К примеру, с одного компа я хочу отослать сообщение компу в банке, чтобы с моего счёта перевели пять баксов на твой. Отсылаю и жду ответа "Ок". Банковский комп получает мессагу "перевести бабки" и отсылает "Ок" (мол, перевёл). И тут "Ок" теряется (в патчпанели хреновый коннектор)! Я не получаю "Ок" и отсылаю тот же запрос ещё раз - на этот раз всё проходит нормально, но в итоге ты получаешь 10 баксов.
И какой толк от таких контрольных пакетов?

Ответить

Номер ответа: 14
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #14 Добавлено: 29.06.06 13:10
Ну, в сломанный телефон можно играть с любым протоколом. Однако, как правило, в TCP сообщения разбивается на несколько пакетов, с указанием смещения относительно начала, и каждый из них имеет свою контрольную сумму. Если один из них прошел дважды (а такое часто бывает не только при плохом коннекте, но и при сильно ветвленой сети) - ничего страшного не будет.
ЗЫ В тех же UDP чатах стоят проверки на дублирование пакетов. Ибо, посылая одну мессагу с одного компа на другой, нет гарантии что она придет один раз - она может придти с разных роутеров, возможно только с разным "временем жизни".

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 30.06.06 00:21
Если на своём компе, то прога матюкнётся, когда ты попытаешся что-то послать (а большего и не надо). А через свитч - нет.

я об этом же...

смысл проверки доставки пакета "ОКом" описал LOL. Слать ОК, пока на этот ОК не ответят им же ОКом... Если этого происходит несколько раз - ничего страшного, если не происходит вообще - таймаут.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам