| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > VB. Ожидание события DataArrival |
| Автор: Gradik 21.11.2005, 16:25 | ||||
| Привет! Возникла проблема с WinSock.
Как после каждого
дожидаться события Winsock1_DataArrival? |
| Автор: Akina 21.11.2005, 17:05 | ||
Что значит - как? никак... когда оно возникнет, тогда возникнет... но чтобы оно возникло, ты ДОЛЖЕН выгрести все с помощью GetData (даже если получишь 0 байтов). Или не видать тебе DataArrival... |
| Автор: Gradik 21.11.2005, 17:45 | ||||
В DataArrival с помощью GetData у меня все отлично получается! Вы имеете ввиду, что никак нельзя дождаться DataArrival, не дожидаясь окончания цикла? while n < 100 |
| Автор: Akina 21.11.2005, 19:44 | ||
Я вообще не понимаю в чем именно у Вас затык. Что, в каждом обороте цикла надо дожидаться прихода данных, что ли? ну так:
но только учти что можешь ведь вообще не получить ни байта - мало ли, сервер лежит... заложи еще и тайм-аут... PS. Кстати, регистрация в т.ч. позволяет исправлять свои сообщения вместо того чтобы плодить дубли. Вроде того что я удалил... |
| Автор: Gradik 22.11.2005, 09:30 | ||||
Спасибо! Сейчас попробую. |
| Автор: Gradik 22.11.2005, 10:28 |
| Привет! 1. А что делать, если я не дождалась за какое-то время ответа от сервера, можно ли просто сделать Winsock(index).Close, или есть другой способ? 2. Почему с сервера приходит очень много сообщений на один запрос (причем куча пустых), можно ли как-нибудь этого избежать? Можно ли использовать Winsock(index).Close после получения первого сообщения от сервера? А можно ли установить объем ответа, который я хочу от сервера получить? |
| Автор: Akina 22.11.2005, 10:36 | ||||||||
конечно можно... IP-стек сам разберется и дропнет все что пришло на закрытый (т.е. несуществующий) сокет.
Вопрос к серверу. А ты им не управляешь. Значит нельзя. Да и зачем?
Нет. Ты должен выбрать все что пришло. Но не обязан это все использовать - возьми да отрежь лишнее... |
| Автор: Gradik 22.11.2005, 10:48 |
| Спасибо, очень благодарна! |
| Автор: Gradik 22.11.2005, 12:01 | ||
| Почему-то никогда не выполняется Winsock1_DataArrival! Почему? Делаю так:
Что тут не так? |
| Автор: Akina 22.11.2005, 12:55 | ||||
| Ты посмотри попристальнее описание WinSock methods в MSDN... возьми примеры кода и доводи их под себя... и потом - что за странная конструкция получилась?
сделай
К тому же я не понял - если что-то пришло, сокет останется незакрытым? |
| Автор: Gradik 22.11.2005, 13:17 | ||||||
Дело не в конструкции! flag всегда true!, я из цикла ожидания не попадаю в Winsock1_DataArrival. Почему? |
| Автор: Akina 22.11.2005, 15:33 | ||
а ты туда и не должна попадать из цикла - это же асинхронная процедура, и она сработает в одном из DoEvents |