Странное поведение WinSock

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

Странное поведение WinSock

Сообщение fob » 05.04.2006 (Ср) 15:47

В проекте на VB6.0 использую компоненту WinSock.
Делаю соедиенение
Код: Выделить всё
Winsock1.RemoteHost = "hostname"
Winsock1.RemotePort = "portnumber"
Winsock1.Connect



Сервер, к которому я подключаюсь включен, порт открыт - короче все нормально с ним. Но при этом Winsock1.State = 6 всегда.

ОДНАКО!!!
Если тот же самый код в 3 строки перенести в новый пустой проект, то все идет нормально.
Я так понимаю, что скорее всего в моем основном большом проекте что-то с чем-то конфликтует. Но вот никак не могу понять что именно. Просто других версий кроме непонятного конфликта у меня нет.
Подскажите кто что сможет!!!
Спасибо!!!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 05.04.2006 (Ср) 15:57

не могу понять почему номер порта имеет тип string

fob
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 19.06.2005 (Вс) 21:29

Сообщение fob » 05.04.2006 (Ср) 16:09

Знал, что этот вопрос возникнет - так вот абсолютно не меняется результат. Теперь уже даже в пустом проекте ничего не соединяется... Что за фигня....

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.04.2006 (Ср) 16:25

Во-первых, указывай порт числом, а не строкой.
А во-вторых, код в студию (более полный код).
Lasciate ogni speranza, voi ch'entrate.

fob
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 19.06.2005 (Вс) 21:29

Сообщение fob » 05.04.2006 (Ср) 16:39

Друг мой )))) конечно я буду указывать порт числом )))
ну а по второму пункту - чесно слово - более полного кода нету. это все. ))) и даже это не хочет работать.
или может тебе нужен целиком проект над которым я работаю и в котором есть эти три строчки кода? ;)))

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.04.2006 (Ср) 16:53

внезапный приступ телепатии показывает, что дело возможно не в этих трех строчках... так что код хотелось бы узреть, а то телепатия штука весьма ненадежная
Весь мир матрица, а мы в нем потоки байтов!

fob
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 19.06.2005 (Вс) 21:29

Сообщение fob » 05.04.2006 (Ср) 17:02

!Viper! ))))))))

короче проблема как бы решилась, но как-то немного странно.
Изначально я открывал соединение незадолго до предполагаемой отправки данных (т.е. вызова SendData). И при этом получалось то о чем я написАл ранее. При этом обработка события Connect для WinSocket компонента никак не наступала - из чего я делаю вывод, что соединения нет.

Теперь че-то вот вдруг я решил открывать соединение в самом начале работы программы. И прям тут же установился коннект и все стало более или менее хорошо.

Т.о. вопрос наверное можно снять, но появляется другой - почему так получилось?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 05.04.2006 (Ср) 17:08

Ну, может, хоть теперь код покажешь?!
Быть... или не быть. Вот. В чём вопрос?

fob
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 19.06.2005 (Вс) 21:29

Сообщение fob » 05.04.2006 (Ср) 17:16

ну ради бога )))

при загрузке программы
Код: Выделить всё

Dim  connectHost as string
Dim port as integer


       Winsock1.protocol = sckTCPProtocol
       Winsock1.RemoteHost = connectHost 'Инициализируется по ходу загрузки из настроек
       Winsock1.RemotePort = port 'Инициализируется по ходу загрузки из настроек
       
       Winsock1.Connect


посылаем данные на одной из форм

Код: Выделить всё
Dim sockData as String
....
Winsock1.SendData sockData


при закрытии проги

Код: Выделить всё
If Winsock1.state <> 0 Then
  Winsock1.Close
End If



УСЁ!!! :roll:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.04.2006 (Ср) 17:21

В порядке эксперимента...
Попробуй указать Winsock1.LocalPort = 0 перед соединением.
Lasciate ogni speranza, voi ch'entrate.

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 05.04.2006 (Ср) 17:45

fob
А ты не думал что проблемы могут крытся в самом WinSock? или в сетевом конфиге?

ЗЫ. Конечно не принципиально но не легче использовать? по моему так красивей, меньше кода.

Код: Выделить всё
ws.Connect host,port


ЗЫЫ. Меня интересует, почему люди пишут не
Код: Выделить всё
ws.listen port


а пишут
Код: Выделить всё
ws.LocalPort = port
ws.Listen

???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.04.2006 (Ср) 17:48

Вообще-то они пишут LocalPort=0, затем LocalPort=n и только потом Listen. И этому есть причины.
Lasciate ogni speranza, voi ch'entrate.

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 05.04.2006 (Ср) 18:11

Какие?

Я всегда использовал сокрашённый вариант, у меня всё всега работало......

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.04.2006 (Ср) 18:14

Избавление от глюков.
После закрытия порт иногда не освобождается, LocaPort=0 помогает бороться с этим глюком.
Lasciate ogni speranza, voi ch'entrate.

fob
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 19.06.2005 (Вс) 21:29

Сообщение fob » 05.04.2006 (Ср) 22:38

Wild VB Code for Food писал(а):fob
А ты не думал что проблемы могут крытся в самом WinSock? или в сетевом конфиге?


1. Думал. В таком случае какие варианты? WinSock можно сказать стандартный контрол в VB 6 - вот я его и использую. Если есть другие, которые позволяют решать такие же заадачи, поделись, плз :roll:
2. Сетевой конфиг? ну может быть. вот тока конфигурация сети достаточно простая, что бы там можно было ошибиться, да и работает сетка вроде без сбоев.

fob
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 19.06.2005 (Вс) 21:29

Сообщение fob » 06.04.2006 (Чт) 12:08

alibek писал(а):В порядке эксперимента...
Попробуй указать Winsock1.LocalPort = 0 перед соединением.


Та же петрушка )))

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.04.2006 (Чт) 12:20

А пример со статьи работает?
http://www.vbstreets.ru/VB/Articles/65986.aspx
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList