| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Socket - множественная буферизация??? |
| Автор: Kergan 4.1.2006, 11:19 | ||
Пишу на шарпе клиентское приложение, есессно вставил сокет и таймер, чтобы читать с него инфу. Так вот ситуация такая: выставил на таймере задержку 5 сек (5000 мсек), получил за это время ТОЧНО БОЛЬШЕ ОДНОГО ПАКЕТА (под пакетом я понимаю flap-пакет, который мне шлет icq-сервер, а не tcp/ip пакет). Забил все это в byte массив кодом:
Sock - это сокет. Так вот, он все обработал грамотно и каждый раз давал мне ровно по ОДНОМУ flap пакету! Хотя все пакеты уже пришли в его буффер (хз какой...). Всвязи с этим вопрос: где он хранит очередь пакетов (не в буффере же чтения, который он должен чистить после Recieve!) |
| Автор: mr.DUDA 4.1.2006, 11:39 |
| Может, размер массива btArr равен размеру одного flap-пакета? Тогда приниматься будет блок байтов не длиннее, чем размер принимающего буфера. |
| Автор: Kergan 4.1.2006, 13:48 |
| во-первых размер массива взят с запасом, намного больше одного флапа во-вторых при таком раскладе (один флап ровно в массив) буффер все равно очистится, я ведь использую первую перегрузку функци recieve, там влаг чтения None по умолчанию... Не могу понять |
| Автор: mr.DUDA 4.1.2006, 21:47 |
| Наверное, стоит поспрашивать в разделе по сетям... Лично мои познания в сокетах на этом ограничиваются, слишком мало дела я с ними имел... |
| Автор: Kergan 10.1.2006, 18:35 |
| Нашел... ну, не документацию - ее, видимо, пока нет... в смысле для таких деталей... короче, буферизация там не множественная, но буффер чтения делится на множество частей, причем не по TCP пакетам, а по пакетам верхнего уровня (в случае с ICQ - FLAP-пакетам) если в АСКД битах TCP пакета содержится о них информация. Короче, класс Socket реализован на удивление качественно. |