Я правильно connectюсь к серверу?

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

Я правильно connectюсь к серверу?

Сообщение Nikolka » 06.05.2006 (Сб) 22:07

Здравствуйте (какой раз вы это уже слышите :)) !

Делаю такую байду:
(WS - Winsock)

Код: Выделить всё

Dim str as string

Private Sub Command1_Click()
'Соединяемся
WS.Close
WS.Connect "http://yandex.ru/",80
End Sub

Private Sub WS_Connect()
'Посылаем строку запроса
'GETstr="http://yandex.ru/"; HOSTstr="yandex.ru"
WS.SendData "GET " & GETstr & " HTTP/1.1" & vbCrLf & _
"Host: " & HOSTstr & vbCrLf & vbCrLf
End Sub

Private Sub WS_DataArrival(ByVal bytesTotal As Long)
WS.GetData str
Clipboard.SetText str
Stop
End Sub


По ходу данная бодяга должна соединить меня с серваком яндекса и получить его главную страницу, но... делаю ws.connect - успешно, но событие Connect не наступает :(

Подскажите - мож я вообще неправильно соединяюсь с серваком в нете? Или как вы это можете сделать?...

С уважением...
nik ))

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 06.05.2006 (Сб) 23:58

добавь в событии DataArrival в самом конце событиё WS.Close
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 08.05.2006 (Пн) 23:12

не помогает... :(

extHack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 04.06.2005 (Сб) 12:31
Откуда: 127.0.0.1

Сообщение extHack » 09.05.2006 (Вт) 13:08

Попробуй вот так

Код: Выделить всё
Dim str As String

Private Sub Command1_Click()
    sckMain.Close
    sckMain.Protocol = sckTCPProtocol
    sckMain.Connect "yandex.ru", 80
End Sub

Private Sub sckMain_Connect()
    'Посылаем строку запроса
    GETstr = "http://yandex.ru/"
    HOSTstr = "yandex.ru"
   
    sckMain.SendData "GET " & GETstr & " HTTP/1.1" & vbCrLf & _
    "Host: " & HOSTstr & vbCrLf & vbCrLf
End Sub

Private Sub sckMain_DataArrival(ByVal bytesTotal As Long)
    sckMain.GetData str, vbString
    Clipboard.SetText str
    Stop
End Sub
n/a

extHack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 04.06.2005 (Сб) 12:31
Откуда: 127.0.0.1

Сообщение extHack » 09.05.2006 (Вт) 13:10

ну да

эту строку WS.Connect "http://yandex.ru/",80 замени на WS.Connect "yandex.ru",80
n/a

miwutka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 76
Зарегистрирован: 10.11.2005 (Чт) 16:34
Откуда: Moscow, Elektrostal

Сообщение miwutka » 10.05.2006 (Ср) 9:11

вроде я гдето писал, что можно попробовать в событии Дата_эррайвл сначала объявить переменную, куда будет записан ответ, как String

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 10.05.2006 (Ср) 17:02

О! А вот это помогло!

Огромное спасибо (всем), буду далее вникать уже в HTML-Proxy протокол :)

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

Сообщение alibek » 10.05.2006 (Ср) 17:08

А что такое HTML-Proxy протокол?
Lasciate ogni speranza, voi ch'entrate.

extHack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 04.06.2005 (Сб) 12:31
Откуда: 127.0.0.1

Сообщение extHack » 11.05.2006 (Чт) 13:30

хм.. а может HTTP-PROXY?
n/a

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 11.05.2006 (Чт) 15:55

совершенно верно, от радости не подумал :)

Хотя появилась ещё одна проблема:

почему-то локальный (!) клиент после приёма от меня данных ставит позицию .State=sckClosed. И когда он должен ко мне в след раз обращаться - коннекта не происходит. Может что-то не так?

extHack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 04.06.2005 (Сб) 12:31
Откуда: 127.0.0.1

Сообщение extHack » 11.05.2006 (Чт) 18:18

а у тебя случайно на событии WS_DataArrival не стоит последняя строчка WS.Close?
n/a

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 11.05.2006 (Чт) 19:23

пока нет ))

я делаю .Close в двух случаях:
1) в connection request:
If WS.State <> sckClosed Then WS.Close
WS.Accept requestID
2) после посылки мне нулевого байта (или как он там по-умному называется :), т.е. окончание передачи HTML страницы: cr+lf+cr+"0" - не точно, но примерно...

Похоже позиция sckClosing (8) - выставляется удалённым хостом:
Код: Выделить всё
Const sckClosing = 8
    Member of MSWinsockLib.StateConstants
    Socket is closing connection to remote computer


(Извиняюсь - хотел сказать sckClosing в предыдущем посте)

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 12.05.2006 (Пт) 15:04

Т.к. пока ответа нет, поясню:

моя прога пропускает через себя траффик:

Opera - моя прога - Инет

Организую это в Опере через HTTP Socks соединение со мной.

Что происходит:

Opera + Я = Connect
Я получаю данные, отсылаю Opera
После окончательного получения данных опера просто выставляет WS.State в позицию 8 sckClosing

При следующем запросе не происходит события connect. Также не происходит передачи мне данных от оперы.

Пробовал после позиции .State=8 выставлять .Close - не помогает. Коннекта также нет, а опера говорит, что соединение с соксом уже няма :(

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 12.05.2006 (Пт) 15:10

да, забыл сказать, что получается, что winsock возможно пользоваться только один раз за загрузку проги... в чём тут делы?

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

Сообщение alibek » 12.05.2006 (Пт) 15:29

А что пишет?
Lasciate ogni speranza, voi ch'entrate.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 12.05.2006 (Пт) 17:46

ничего не пишет, ошибок не выдаёт, только connect не происходит.

Может подскажете проги, какие могут отследить состояния tcp соединения? Если банальным сниферром, я не приложу ума как, outpost тоже не предлагать - там всё очень мимолётно ;)

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

Сообщение alibek » 12.05.2006 (Пт) 21:46

tcpview, tdimon
Lasciate ogni speranza, voi ch'entrate.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 14.05.2006 (Вс) 20:17

респект, ща заценю...


... всё ясно, несколько неправильная обработка етава нулевого символа - т.е. комбинации, которая возвращает окончание передачи страницы.

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 17.05.2006 (Ср) 14:57

ИМХО, из снифарей лучший CommView (правда он "платный"), но, насколько я понял, трабла не в этом.
Опера после отсылки тобой закрывает соединение? Значит ты неверно какие-то данные посылаешь, ведь именно прокси должен закрыть коннект когда все уже дослал (proxy-connection: close)!.. Плюс, ты должен закрыв соединение тут же его снова листенить. Кстати, стейт Closing вроде ставится когда делаешь .Close пока еще есть данные в буфере. Так что надо ждать пока не выпадет событие SendComplete (или как-то так).

Если непонятно, объясняю:
0. Листенишь
1. Коннект оперы
2. Принимаешь запрос оперы
3. Геттишь по запросу
4. Отсылаешь опере
5. Ждешь пока не выпало SendComplete
6. Клозишь
7. Снова листенишь
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

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

Сообщение alibek » 17.05.2006 (Ср) 15:17

VOS писал(а):ИМХО, из снифарей лучший CommView (правда он "платный"), но, насколько я понял, трабла не в этом.

Про Ethereal слышал?
Lasciate ogni speranza, voi ch'entrate.

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 17.05.2006 (Ср) 22:02

proxy-connection: close !

мне тоже эта идея пришла... но я её потёр почему-то и забыл. надо попробовать.

кстати commview пользуюсь всегда - классная вещица, а "платная" - для русского человека ничего не говорит :))

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 23.05.2006 (Вт) 16:06

Насчёт этой бодяги вы все меня обалденно выручили.

Сделал proxy-connection:close - нефига, а после заметил одну маленькую особенность: я лам :)

Вообшкм надо-то как: как удалённый сервак выставил позицию 8: sckClosing, надо сразу это дело передавать опере, закрывать соединение WS.Close и снова его листить WS.Listen. А я дуб не листил :( Гениально! ))

... что бы не постить новую мессагу задаю вопрос здесь же:
как можно объявить получение допустим картинки (то бишь битов) Сейчас я Dim str As String.
As BYte ? Так там же 255 цифер и вместиться только...

И ещё: мона ли организовать многопоточеость без создания массива WinSock?

Уже сильно и заранее благодарен...

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 23.05.2006 (Вт) 16:25

Насчет передачи картинки ты погорячился. А тем более через Винсок, щаз тебя пошлют в П.... :о)

ЗЫ Поиск я имел в виду.
Пора уже всем хорошим людям собраться и убить всех плохих людей.

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

Сообщение tyomitch » 23.05.2006 (Вт) 17:09

Nikolka писал(а):как можно объявить получение допустим картинки (то бишь битов) Сейчас я Dim str As String.
As BYte ? Так там же 255 цифер и вместиться только...

И ещё: мона ли организовать многопоточеость без создания массива WinSock?

Мда... В рамочку, и на главную страницу.
:-|



Про 255 цифер -- это вообще анекдот из серии "косинусом вперёд"...
Изображение

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 24.05.2006 (Ср) 16:49

А ведь я предупреждал вас, что я лам :))

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 24.05.2006 (Ср) 16:56

не судите строго )

Так что же - не через АПИ же картинку посылать.

Да и не пойму в чём трабла с Byte: проверил: только 255 значений :roll: , а что не так? :)

[offtop]
Однажды одного мальчика в писюн укусила оса. На следующий день этого же мальчика снова укусила в писюн оса. Но уже другая. А другой мальчик на своем писюне обнаружил клеща. Через пару дней он побежал в больницу, но никому не разрешал прикасаться к своему члену. Так пацан и ходит до сих пор с клещом на письке. Еще несколько ребят обнаруживали клещей у себя на мошонке. Но быстро соображали и, несмотря на приятные ощущения, опускали свои достоинства в бензин. Клещи задыхались и вылезали. А один мальчик во время такого выманивания клеща курил. Пепла было много. А один мальчик переехал в США и пошел в их армию. Его отправили в Панаму и там, как-то переходя озеро, он решил пописать. Пока он писал, через письку в него забралось пару сотен мельчайших червячков. В скором времени червячки выросли, возмужали, и разорвали мальчика на части. Будьте ближе к природе
[/offtop]
)))

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 24.05.2006 (Ср) 17:57

ну не знаю (а знать то хочеться))
обыскал весь форум (можешь посмотреть в логах)

Вообщем наверное высвечивается логичный вывод:
1. Либо качать картинки как простые файлы а после к ним подстраивать строку заголовка
2. Либо заюзать всё тот же винсок но объявив (как-то) переменную для приёма как битовую что-ли. Или вааще угробить прогу объявив As Variant

Что скажете?

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 24.05.2006 (Ср) 18:08

А чем тебе стринги не угодили?
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

Nikolka
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 174
Зарегистрирован: 01.01.2004 (Чт) 2:06

Сообщение Nikolka » 24.05.2006 (Ср) 21:28

а через стринги )) низя, наверное, передать битики... хотя я не пробовал и чё та тут ещё спорю ))

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

Сообщение Amed » 24.05.2006 (Ср) 21:44

Юзера Nikolka рекомендую забанить на месяц.

След.

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

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

Сейчас этот форум просматривают: Bing-бот, SemrushBot и гости: 99

    TopList