Массив UDP Winsock

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

Массив UDP Winsock

Сообщение stashuk » 24.02.2013 (Вс) 22:55

Для постоянного поочередного обмена данными с несколькими удаленными микроконтроллерами применяю массив UDP Winsock1(0), Winsock1(1)... Нулевой ставлю на форму "физически" остальные Load Winsock1(n)... Задаю нужные параметры каждому. Так вот если вместо Load их все ставить "физически" все крутится, а только с нулевым и Load остальным обмен идет только с нулевым. Уже у первого Invalid Argument в процедуре передачи. Подскажите в чем дело ? Или с UDP массив не пляшет? TCP применять для этого нет никакого смысла и усложняет программу для контроллера.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Массив UDP Winsock

Сообщение Хакер » 24.02.2013 (Вс) 23:05

А ты проводишь какую-либо инициализацию после Load Winsock(n)?

Да и к тому же, иметь контрол, у которого осталось дефолтной автоматически присвоенное имя Winsock1 — признак фекального подхода к технической деятельности. При таком подходе инженер как бы портит себе карму и у него просто волшебным образом всё всегда отказывается работать правильно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

stashuk
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.03.2012 (Пт) 15:15

Re: Массив UDP Winsock

Сообщение stashuk » 25.02.2013 (Пн) 13:34

Имя, бог с ним это энный тест-вариант. Вот инициализация:
Код: Выделить всё
Private Sub Form_Load()
    WSoc1(0).Protocol = sckUDPProtocol
    WSoc1(0).RemoteHost = "192.168.50.2"
    WSoc1(0).RemotePort = 1051
    WSoc1(0).Bind 1001
        Load WSoc1(1)
        WSoc1(1).Protocol = sckUDPProtocol
        WSoc1(1).RemoteHost = "192.168.50.3"
        WSoc1(1).RemotePort = 1052
        WSoc1(1).Bind 1002
End Sub

Далее не спеша, с таймером по очереди передаю короткие (массив 4 байта) датаграммы.
Код: Выделить всё
Private Sub Conf_soc()'
    If n = 1 Then
    n = 0
    Else
    n = 1
    End If
Zapros
End Sub

С WSoc1(0) проходит и получаю ответ с девайса. При передаче с WSoc1(1) - Invalid... Если на форму поставить WSoc1(1) -идет. Идет и когда отключить строку WSoc1(1).RemoteHost = "192.168.50.3", но передается при этом на адрес "192.168.50.2" и любой RemotePort но слушать дает только разными портами на сокетах. Но это для сети невозможно - одинаковые IP в сети!


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList  
cron