Помогите найти и исправить ошибку в программе

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

Помогите найти и исправить ошибку в программе

Сообщение AntonGV » 06.06.2006 (Вт) 13:13

Во время передачи данных с помощью winsock возникает ошибка:

Run-time error '40006':
Wrong protocol or connection state for the requested transaction or request.

Пожалуйста посмотрите программу и исправьте ошибку
Вложения
TCP-IP.rar
нерабочая программа
(2.72 Кб) Скачиваний: 23

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.06.2006 (Вт) 13:19

Скорее всего, когда ты пытаешься что-то отправить, соединение ещё не установлено, или уже закрыто. у winsock'а есть такое хорошее свойство-state, проверяй его перед отправкой.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.06.2006 (Вт) 13:30

А теперь собственно ошибка: loopback - это не 121.0.0.1, а 127.0.0.1

И запомни: при неудачном подключении winsock НЕ СГЕНЕРИТ ошибку, так что всегда жди пока он соединится или выставит state в sckError, и только если state=sckConnected, считай, что соединение установлено.
Изображение

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 06.06.2006 (Вт) 13:36

Огромное спасибо! ошибку я искал совсем в другом месте =)

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

Сообщение tyomitch » 06.06.2006 (Вт) 13:57

keks-n писал(а):И запомни: при неудачном подключении winsock НЕ СГЕНЕРИТ ошибку

Да ну прямо?
Код: Выделить всё
Option Explicit

Private Sub Form_Load()
Winsock1.Connect "google.com", 12345
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Какой кошмар! Ошибка!" & vbCrLf & Description
End Sub

Запусти и подожди таймаута.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.06.2006 (Вт) 14:06

Он не сгенерит ошибку, в обычном понимании, а сгенерит событие сообщающее о ней. Ловить его из процедуры соединения не очень удобно, проще мониторить state...
Изображение

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

Сообщение tyomitch » 06.06.2006 (Вт) 14:12

Если процедура соединения -- это не бесконечный цикл с DoEvents внутри, а нормальный event-driven код, то такое событие ловить весьма удобно.
Изображение


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

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

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

    TopList