WinSock.GetData

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

WinSock.GetData

Сообщение Gogic » 15.06.2010 (Вт) 2:40

Приветствую.

Есть WinSock в режиме Listen и есть событие DataArrival.

Код: Выделить всё
Private Sub Form_Load()
    tcpServer.LocalPort = 3356
    tcpServer.Listen
End Sub


Код: Выделить всё
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    tcpServer.GetData strData
    Debug.Print strData
End Sub


Собственно, в браузер подается URL вида: http://localhost:3356/?blablabla

В итоге, получаем ответ в окне отладки, как следовало догадаться.

Но, при повторном переходе по этому или другому URL, ничего не получаем.

Пробуем изменить код события примерно на следующий:

Код: Выделить всё
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    tcpServer.GetData strData
    Debug.Print strData
    tcpServer.Close
    tcpServer.LocalPort = 3356
    tcpServer.Listen
End Sub



Теперь получаем все и вовремя. Но в количестве 5-10 штук за переход по ссылке.

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

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

Re: WinSock.GetData

Сообщение alibek » 15.06.2010 (Вт) 7:57

Чтобы без закрытия сокета — указывай протокол HTTP 1.1.
И переоткрывать сокет в DataArrival не нужно. Дождись Close и в нем переоткрывай.
Lasciate ogni speranza, voi ch'entrate.

Gogic
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 24.08.2008 (Вс) 13:19

Re: WinSock.GetData

Сообщение Gogic » 15.06.2010 (Вт) 19:54

1. Прошу поподробнее про протокол HTTP 1.1.
Где его указывать? Ответы приходят именно такие:
Код: Выделить всё
GET /?blablabla HTTP/1.1

итп.

2. Все что внутри close вообще не обрабатывается почему-то.
Вставлял внутрь что-то типа
Код: Выделить всё
Debug.Print "Close"

никакого эффекта.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: WinSock.GetData

Сообщение iGrok » 15.06.2010 (Вт) 19:59

Эмм.. А ты браузеру хоть что-то вообще отвечаешь?
Если нет, так чего же ты хочешь тогда?

В первом случае, он спокойно ждёт себе и держит соединение. Если ты делаешь из браузера ещё один запрос - он пытается создать новое соединение. Только у него не получается - ты же соединения больше не принимаешь.
Во втором он видит ошибку сети (соединение закрылось, а ответ так и не получен), и повторяет запрос.

HTTP/1.1 писать в ответе браузеру.
label:
cli
jmp label

Gogic
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 24.08.2008 (Вс) 13:19

Re: WinSock.GetData

Сообщение Gogic » 15.06.2010 (Вт) 21:18

Тогда вопрос, в какое событие и как писать ответ браузеру?

Пока не разобрался :(

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: WinSock.GetData

Сообщение FireFenix » 15.06.2010 (Вт) 22:02

Gogic писал(а):Тогда вопрос, в какое событие и как писать ответ браузеру?

Пока не разобрался :(

Ну ей богу! Возьми снифер HTTP заголовков и посмотри что получается при работе с обычным браузером... да хоть тот жий плагин для ФФ TamperData

и курить до просветления http://ru.wikipedia.org/wiki/HTTP, особенно нижнюю часть с примерами заголовков

Gogic писал(а):Тогда вопрос, в какое событие и как писать ответ браузеру?
Пока не разобрался :(

Наверное же после получения и распарсивания запроса от браузера (с) КЭП
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Gogic
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 24.08.2008 (Вс) 13:19

Re: WinSock.GetData

Сообщение Gogic » 15.06.2010 (Вт) 23:14

Спасибо, уже курю :)


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

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

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

    TopList