|
Winsock
|
|||
---|---|---|---|
#18+
Не могу приручить сокет Вначале пробова на одной форме работать с сокетом. Первый запрос работает нормально, все следующии или как повезет могут выдать сообщение wrong protocol or connection state for the requested transaction or request (№40006) Winsock1.State = 9 а иногда Winsock1.State=6 Видимо не правильно закрываю открытый порт. Но на том же порте когда делаю send data если не закрываю, то до поры работает, потом ошибка 40006. Иногда даже бывает, что сразу при старте такая ошибка выбивает. Наводит меня на мысль что открытый к примеру сокет Winsock1.Protocol = sckTCPProtocol Winsock1.LocalPort = 20020 Winsock1.RemoteHost = "188.93.22.242" Winsock1.RemotePort = 80 нуждается в закрытии и нужно открыть следующий свободный, например 20021. Так в чем прикол ? Winsock1.Close должен закрывать соединение но однако ошибка после Close если сделать Connect и дать Send будет 100%-тной а State = либо 9 либо 6. Как грамонтно освобождать порты ? Я уже в отдельную форму переместил для эксперемента и вызываю ее как модальную, чтоб не было дополнительных процессов в связи с DoEvents также разставил логичиские переменные что не дадут доступ к коду программы пока не будет закрыто окно в котором сокет и поле для запроса и поле для ответа. Первый раз ПОЧТИ всегда ответ приходит успешно, но потом просто убийство с уважением Андрей ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2011, 10:48 |
|
Winsock
|
|||
---|---|---|---|
#18+
Долго искал, но нашел. В даном архиве есть модуль и клас который подключаем к форме например с помощью Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
"+" этой программы - все прозрачно. Видно как работает WinSock. "+" Соединения уже не выдают ошибок при повторном соединении после закрытия "+" довольно просто используется "+" с помощью сокета можна методом POST отправлять по шаблону протокола также файлы качаем CSocketMas.rar, подключаем к своему проэкту и радуемся ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2011, 19:18 |
|
Winsock
|
|||
---|---|---|---|
#18+
А вот как с этим бороться ? Ответ от сервера: Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET Date: Sun, 20 Nov 2011 17:27:16 GMT Content-Length: 30654 событие Client_DataArrival(ByVal bytesTotal As Long) принимает по разному, но примерно от 1000 до 3000 байт. Код: plaintext 1. 2. 3. 4.
Перешол бы на Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2011, 21:38 |
|
Winsock
|
|||
---|---|---|---|
#18+
то Valeriu: работает безотказно. Если в запросе указано "Connection: Keep-Alive", тогда нужно самому проверять по "Content-Length:" и обрезать. Если указано "Connection:Close" тогда после события закрытия конекта можно также брать готовое значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 01:42 |
|
Winsock
|
|||
---|---|---|---|
#18+
Я так-же работал с этим пока не столкнулся с вышеуказанным казусом. Пришлось использовать http://www.ostrosoft.com/oswinsck.asp И сразу все пошло. Но одно смущает, это "немного" платное ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 09:53 |
|
Winsock
|
|||
---|---|---|---|
#18+
событие Client_DataArrival(ByVal bytesTotal As Long) принимает по разному, но примерно от 1000 до 3000 байт. /topic/840216&hl= ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 11:00 |
|
Winsock
|
|||
---|---|---|---|
#18+
Вам нужно словить событие начало приема данных и событие окончание приема данных Т.е. должны соблюдаться эти условия для приема данных в полном обьеме Я например контролирую окончание передачи со стороны сервера примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 11:09 |
|
Winsock
|
|||
---|---|---|---|
#18+
Пользуюсь "OSWINSCK.dll". А что с проплатой ? Работает. Потом заблокируется ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 16:44 |
|
Winsock
|
|||
---|---|---|---|
#18+
Оканцовку буду отлавливать исходя из теории. Ответ должен начинаться из: "HTTP/1.1 200 OK" Для этого нужно в одну переменную загнать строчку Status1=Left(InResponse, InStr(InResponse,vbcrlf)-2 при условии что InStr(InResponse,vbcrlf)>10 Из этого можно опознать начало также по статусу "200 OK" или опознавать другие статусы если нужно Status1=Right(Status1,6) грубо отрезали проверили - есть начало Дальше ищем, ждем "Content-Length:" который также не сложно вычеслить. В случае если за определенное времья не дожыдаемся - закрываем соединение и делаем еще попытку. Если извесно Length - смело ждем дозагрузки пакета до Length длины. Если будет больше данных, то часть Kod=Left(InResponse, Length) получаем, остальное InResponse=Mid(InResponse, Length+1) Вот где то по таком сценарию буду писать код ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 17:00 |
|
Winsock
|
|||
---|---|---|---|
#18+
авторПользуюсь "OSWINSCK.dll". А что с проплатой ? Работает. Потом заблокируется ? Нет. Для личного пользования free ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 17:26 |
|
Winsock
|
|||
---|---|---|---|
#18+
Если конкретнее : Non-commercial license (free) Unlimited usage for developing non-commercial applications. Неограниченное использование для разработки некоммерческих приложений. Я так понимаю для опенсорс можно использовать бесплатно ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 18:09 |
|
Winsock
|
|||
---|---|---|---|
#18+
ну вот из Вашего посылания на библиотеку я скачал и там был проэкт VB. Я так грубо по своему налепил и у меня пока работает, не вредничает. Хоть там нужно много чего проверять чтоб не было ошибок. Хочу сделать работающий масив для более быстрой работы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
Label10 - с текстом "пришел статус" , Label9 - сам статус (200 ОК или другой) Label7 - извесна длина, Label8 - длина также остается доделать "количество запросов" и "ожидание", чтоб в случае торможения преждевременно закрывал конект и делал запрос еще раз Код нужно упрощать, поскольку может быть заметно торможение. Потом все Label перекину в обычные переменные как статус Код также нужно конвертовать после получения в кирилицу. отправка данных MSXML2.XMLHTTP ("POST@) и прием результатов у меня не получается выдает ошибку сдесь .Write МояПеременнаяТипаString На запас у меня уже есть своя функция сделана давно через IF ELSEIF и CASE ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 18:24 |
|
Winsock
|
|||
---|---|---|---|
#18+
Если контрол виснет, делаю так Код: plaintext 1. 2.
Вопрос: Как создать масив ? Dim WithEvents o As OSWINSCK.Winsock и Set o = New OSWINSCK.Winsock в масив не береться Set o(1) = New OSWINSCK.Winsock - ошибка Dim WithEvents o(1) As OSWINSCK.Winsock - ошибка Public o(100) as OSWINSCK.Winsock - работает но без Set ничего не дает ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2011, 20:26 |
|
Winsock
|
|||
---|---|---|---|
#18+
Никто не заикнулся о Load В одном из примеров увидел такой способ и офигел как все просто. set ... =new ... прятается Я раньше думал что load можно применять только для Form, а оказывается ним можно клепать масивы нужных элементов ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2011, 01:12 |
|
Winsock
|
|||
---|---|---|---|
#18+
к примеру создаете любой элемент, в индекс свойствах ставите значение ноль. Дальше в процедуре пишем Load название_элемента(новый индекс) будет создано под новым индексом новый элемент который унаследует все свойства от нулевого или предыдущего (не проверял). Для проверки достаточно изменить хотябы (если видим элемент) Left или Top. События работают по стандартной схеме только с масивом (по Index разбираем). Таким способом удалось ускорить процес конектов WinSock а элементы которые сделали свою работу либо была какая-то ошибка удалялись. Проблему решено)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2011, 01:21 |
|
Winsock
|
|||
---|---|---|---|
#18+
Андрей159, весь топик читал, многое не понятно ... читал начало >закрываю открытый порт читал конец >Проблему решено)) Конец очень впечатляет... Не могли бы Вы выложить конечный код и пояснить практическую его значимость для Вас, возможно что-то смогу почерпнуть для себя, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2011, 04:26 |
|
|
start [/forum/topic.php?fid=60&fpage=90&tid=2158240]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 372ms |
total: | 528ms |
0 / 0 |