чудо по имени Winsock (если не назвать точнее)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

чудо по имени Winsock (если не назвать точнее)

Сообщение Sun07 » 03.12.2006 (Вс) 10:01

Заполняю контрол Winsock в процедурке Form_Load. Ставлю код в конце процедуры - работает. Ставлю код в начале процедуры (перед открытием файлов, заполнением свойств контролов и т.д.), этот нехороший контрол потом только передаёт данные и совершенно не принимает от сервера! Что Winsock надо, не пойму :(
Код: Выделить всё
  With wsk1   ' Имя Winsock элемента
    .RemoteHost = serverIP 'у меня пока 127.0.0.1
    .RemotePort = serverPort
'если LocalPort=0 клиент привязывается к свободному порту
    .Bind ' Привязка к локальному порту.
    End With

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 10:10

Покажи код целиком, а то у телепатов сегодня выходной...
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.12.2006 (Вс) 10:15

Данные должен принимать другой Winsock. Поищи примеры на форуме, было очень много.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.12.2006 (Вс) 10:26

Amed, он же говорит, что этот самый винсок у него данные передаёт? Значит, он на нём и устанавливает соединение.
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 03.12.2006 (Вс) 10:46

да, данные передаёт, но принимает только тогда, когда его "заполнение" стоит в конце процедуры Form_Load! Может ему надо время, чтобы быть готовым к работе, например, к корректной привязке к порту или чего ему ещё не хватает! :shock: Код показать не могу... Простите великодушно, забыл сказать, я использую UDP-протокол - приём и передача данных на одном сокете.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 03.12.2006 (Вс) 22:55

Вы не поверите, но дело обстоит так:
На форме имеется SSTab, на нём лежит Winsock и WebBrowser. Так если поставить код заполнения винсока в Form_Load перед кодом заполнения WebBrowser (WB.navigate "res://mshtml.dll/blank.htm"), то винсок вообще не принимает данные! Если поставить после, винсок нормально работает! Если WB.Visible=False винсок нормально работает вне зависимости от положения его кода в Form_Load! Протокол UDP. Что это за чудеса такие?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 04.12.2006 (Пн) 1:03

Если Winsock также убрать с SSTab и положить на форму - он работает! Значит, получается и SSTab в чём-то виноват!

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 04.12.2006 (Пн) 1:52

1) Попробуй после WB.Navigate ....

поставить
Код: Выделить всё
while wb.busy

doevents

wend


2) перенеси код в Form_Activate

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 04.12.2006 (Пн) 6:42

Уважаемый Alexanbar, спасибо за совет, но меня не столько интересует решение проблемы (она уже решена), сколько непонятности с контролом SSTab (который после установки последних обновлений для VB хорошо "обновился" :), или же он такой и был всегда по своей природе :) ). То этот контрол мешает возникновению
обработчика Mouse_Down при работе с иконкой (см. http://bbs.vbstreets.ru/viewtopic.php?t=29130 ), теперь этот контрол не даёт возникать обработчику wsk1_DataArrival. Я не пойму ПОЧЕМУ, что за дела такие?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 04.12.2006 (Пн) 17:58

А зачем Winsosk помещать на SStab? Он ведь всё равно невидим. ПРисвой ему индекс, соответствующий текущему табу.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 04.12.2006 (Пн) 19:43

а почему бы его и не положить на SSTab, ведь другие контролы лежат и работают нормально. Тем более, что SSTab натянут на всю форму. Вопрос в другом, каких чудес ещё можно ожидать от SSTab, не разобравшись с уже имеющимися? Каким образом индекс закладки связан с индексом Winsock?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 04.12.2006 (Пн) 20:17

Вообще-то обычно на sstab кладут контролы, которые нужно показывать, в зависимости от таба.

Для вызова соотв. winsock-а можно использовать

SSTab1_Click

Код: Выделить всё
Private Sub SSTab1_Click(PreviousTab As Integer)
With winsock(SSTab1.Tab)
..........
End With
End Sub



Но мне кажется, что дело в кодах событийных процедурах SSTAb.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 13.12.2006 (Ср) 2:32

А причина то вряд ли в SSTab... Дело в том, что в обработчике Load формы frmM (стартовая форма) я вызываю форму frmA (frmA.BorderStyle=1) - frmA.Show vbModal. И, когда в любом обработчике событий этой frmA получается задержка (например, MsgBox в Load формы frmA) или задержка в wsk1_DataArrival (а сокет ЛЕЖИТ на форме frmM, UDP протокол!), например, в режиме отладки, - то при приходе данных от сервера перестаёт срабатывать wsk1_DataArrival, т.е., если поставить брэкпоинт в wsk1_DataArrival, то он сработает один раз и при последующих приходах данных от сервера wsk1_DataArrival не сработает! Интересно, почему?


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 18

    TopList  
cron