Winsock, UDP, несколько клиентов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Traktarist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.07.2009 (Вт) 15:13

Winsock, UDP, несколько клиентов

Сообщение Traktarist » 28.07.2009 (Вт) 15:39

Возможно ли сделать с протоколом UDP так, чтобы все клиенты получали сообщение от серевера? Если да, то как? Получается так, что только один клиент, получает сообщения от сервера, тот, который был первым запущен.

Сервер:

Форма Form1, на форме контрол Winsock с именем Ws1 и два текстовых поля Text1 и Text2, вводимое в Text1 отсылается клиенту, в Text2 отображается полученое от клиента (практически это не нужно).

Код: Выделить всё
Private Sub Form_Load()
    Ws1.Protocol = sckUDPProtocol
    Ws1.LocalPort = 1001
    Ws1.Bind
End Sub

Private Sub Text1_Change()
    Ws1.SendData Text1
End Sub

Private Sub Ws1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Ws1.GetData strData
    Text2 = strData
End Sub


Клиент:

Форма Form1, на форме контрол Winsock с именем Ws1 и два текстовых поля Text1 и Text2, вводимое в Text1 отсылается на сервер, в Text2 отображается полученое от сервера.

Код: Выделить всё
Private Sub Form_Load()
    Ws1.Protocol = sckUDPProtocol
    Ws1.RemoteHost = "127.0.0.1"
    Ws1.RemotePort = 1001
    Ws1.Connect
End Sub

Private Sub Text1_Change()
    Ws1.SendData Text1
End Sub

Private Sub Ws1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Ws1.GetData strData
    Text2 = strData
End Sub



Исходники во вложении.
Вложения
VB My Client-Server (UDPP).zip
(11.61 Кб) Скачиваний: 68
Последний раз редактировалось Traktarist 28.07.2009 (Вт) 16:17, всего редактировалось 1 раз.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Winsock, UDP, несколько клиентов

Сообщение Денис » 28.07.2009 (Вт) 15:50

У тебя обрабатывается событие Change? Это просто ужас какой-то! И клиент и сервер, будут засирать (извиняюсь) сеть после каждой введенной буковки. Может из-за этого у тебя и блочится всё? Сделай отправку в событии KeyPress что ли..
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Traktarist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.07.2009 (Вт) 15:13

Re: Winsock, UDP, несколько клиентов

Сообщение Traktarist » 28.07.2009 (Вт) 16:02

Денис писал(а):У тебя обрабатывается событие Change? Это просто ужас какой-то! И клиент и сервер, будут засирать (извиняюсь) сеть после каждой введенной буковки. Может из-за этого у тебя и блочится всё? Сделай отправку в событии KeyPress что ли..


Это пробный, экспериментальный вариант, практически конечно такого не будет. Дело не в этом, больше одной буквы я и не вводил.

Traktarist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.07.2009 (Вт) 15:13

Re: Winsock, UDP, несколько клиентов

Сообщение Traktarist » 28.07.2009 (Вт) 16:15

Вот вариант с кнопками для отправки, результат тот же.
Вложения
VB My Client-Server (UDPP) v2.zip
(11.85 Кб) Скачиваний: 79

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Winsock, UDP, несколько клиентов

Сообщение JohnK » 28.07.2009 (Вт) 17:37

Ну насколько я понимаю, если ты хочешь чтобы все "услышали" тебя по UDP, нужно послать широковещательный пакет.
Но сам протокол не гарантирует 100% доставку данных.
Какая цель твоей программы?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Traktarist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.07.2009 (Вт) 15:13

Re: Winsock, UDP, несколько клиентов

Сообщение Traktarist » 28.07.2009 (Вт) 18:08

JohnK писал(а):Ну насколько я понимаю, если ты хочешь чтобы все "услышали" тебя по UDP, нужно послать широковещательный пакет.
Но сам протокол не гарантирует 100% доставку данных.
Какая цель твоей программы?


Цель программы - уведомить клиентов, что на сервере обновлены данные и их можно забирать (по http или ftp). То что нет гарантии доставки знаю, это не страшно, после обрыва соединения клиент будет загружать все данные (или список обновленных данных) или в кранем случае вручную нажмет кнопочку "обновить", изыскиваю способ сэконмить трэфик, как c TCP сделать знаю.

Как послать широковещательный пакет? Пока не встречал примеров, может есть где статься или пример?

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Winsock, UDP, несколько клиентов

Сообщение JohnK » 28.07.2009 (Вт) 18:15

Скажем для подсети 192.168.0.0/24 широковещательный будет 192.168.0.255.
А что непонятного с TCP ?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Traktarist
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.07.2009 (Вт) 15:13

Re: Winsock, UDP, несколько клиентов

Сообщение Traktarist » 28.07.2009 (Вт) 18:30

С TCP все понятно, получается, но хочу попробовать вариант с UDP. Честно говоря про

Скажем для подсети 192.168.0.0/24 широковещательный будет 192.168.0.255.


не понял, попробовал у сервера поставить .RemoteHost = "255.255.255.255" - не помогает. Ладно, пока почитаю интернет на эту тему.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Winsock, UDP, несколько клиентов

Сообщение JohnK » 28.07.2009 (Вт) 18:54

Обычно "клиенты" при запуске или в процессе работы сами "лезут" на сервер за обновлениями. Банальная ситуация: во время оповещения сервером половины клиентом не было в сети. В таком случае серверу нужно "засорять" сеть частыми рассылками, чтобы застать всех клиентов... ИМХО, предпочтительнее придерживаться классической схемы (см. выше)
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 91

    TopList