Проблема с Winsock :(

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

Проблема с Winsock :(

Сообщение CodeName33 » 22.10.2004 (Пт) 9:29

Может вопрос и глупый, но я очень долго нигде не мог найти ответа. Нужно скачать файл с ИНЕТА. Соединение через Winsock. Запрос отправляется - файл по частям приходит потихоньку. Данные ловлю на _DataArrival и соединяю в одну строку. Но последний пакет иногда не доходит. После того как сервер отправляет последний пакет он сразу закрывает соединение. Событие _DataArrival у меня срабатывает, но GetData я вызвать не могу потому, что соединение уже закрыто (пишет соответствующую ошибку). Во всех примерах, которые я скачивал та же проблема. Щас пишу прогу - прокси. Всё работает, только картинки на страницах остаются немного недогруженными до конца. Можно и так конечно, но достало так уже. Может кто знает в чём проблема?
Программисты не глючат - глючат компиляторы...

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 22.10.2004 (Пт) 9:55

Качай с помощью URLDownloadToFile.
Код: Выделить всё
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


А вообще надо поэкспериментировать (это я сам с собой).[/b]

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 22.10.2004 (Пт) 10:31

Dagobert, Качать, то можно а вот в случае с прокси это не поможет.
Программисты не глючат - глючат компиляторы...

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

Сообщение alibek » 22.10.2004 (Пт) 10:48

Попробуй отправлять не HTTP 1.1, а HTTP 1.0.
Lasciate ogni speranza, voi ch'entrate.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 22.10.2004 (Пт) 11:08

alibek а какая разница. Файл я уже понял как скачать. Я прокси хочу сделать. Это уже не я запросы формирую а программы которые его используют. Мне нужно только перенаправить их на другой сервер, возвращать ответ и чтобы при этом данные не терялись.
Программисты не глючат - глючат компиляторы...

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

Сообщение alibek » 22.10.2004 (Пт) 12:52

Разница в протоколе. HTTP 1.0 указывает, что сервер должен уведомить клиента о завершении загрузки, т.е. пока ты не скачаешь все, соединение сервер не разорвет.
Lasciate ogni speranza, voi ch'entrate.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 22.10.2004 (Пт) 13:27

Ну а если это не я выбираю, какой идёт запрос, а мне нужно просто передать его на сервер и вернуть ответ.
Программисты не глючат - глючат компиляторы...

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

Re: Проблема с Winsock :(

Сообщение tyomitch » 22.10.2004 (Пт) 15:37

CodeName33 писал(а):Может кто знает в чём проблема?

Это документированный баг Винсока :-)
Нужно либо поставить SP4 (или SP5?), либо юзать вместо Винсока другие контролы.
Изображение

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

Сообщение alibek » 22.10.2004 (Пт) 15:50

tyomitch, а откуда информация?
Я тоже писал однажды мини-прокси, подобный этому (т.е. просто форвардил запросы и возвращал ответы), тоже был такой баг, что картинки не догружались. Долго мучал, потом плюнул и поставил AnalogX Proxy. Но интересно все-же.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение tyomitch » 22.10.2004 (Пт) 15:56

Я просто тоже сам с этим сталкивался... :-)

Информация отсюда: http://support.microsoft.com/default.as ... -us;319692
SYMPTOMS
A Winsock control may fire a DataArrival event with valid data length (a number that is greater than 0) after the Close event. If you try to call the GetData method for that event, you receive the following error message:

Run-time error: 40006

Wrong protocol or connection state for the requested transaction or request.

CAUSE
This problem occurs because of a bug in the Winsock control. Although the occurrence of this problem depends on data flow between two entities, the problem may occur more consistently when the client (receiver) application is much slower than the server (transmitter) application, and when no application-level flow control is implemented.
Изображение

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 25.10.2004 (Пн) 13:57

tyomitch, SP5 не помогает (XP). Проблема остаётся. А какие ещё есть контролы для TCP/UDP?
Программисты не глючат - глючат компиляторы...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.10.2004 (Пн) 14:06

Есть ещё самописные обёртки для winsock api. Поюзай их :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

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

    TopList