Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Socket - множественная буферизация???


Автор: Kergan 4.1.2006, 11:19
Пишу на шарпе клиентское приложение, есессно вставил сокет и таймер, чтобы читать с него инфу. Так вот ситуация такая: выставил на таймере задержку 5 сек (5000 мсек), получил за это время ТОЧНО БОЛЬШЕ ОДНОГО ПАКЕТА (под пакетом я понимаю flap-пакет, который мне шлет icq-сервер, а не tcp/ip пакет). Забил все это в byte массив кодом:
Код

if (Sock.Available > 0) {Sock.Recieve(btArr);}

Sock - это сокет. Так вот, он все обработал грамотно и каждый раз давал мне ровно по ОДНОМУ flap пакету! Хотя все пакеты уже пришли в его буффер (хз какой...). Всвязи с этим вопрос: где он хранит очередь пакетов (не в буффере же чтения, который он должен чистить после Recieve!)

Автор: mr.DUDA 4.1.2006, 11:39
Может, размер массива btArr равен размеру одного flap-пакета? Тогда приниматься будет блок байтов не длиннее, чем размер принимающего буфера.

Автор: Kergan 4.1.2006, 13:48
во-первых размер массива взят с запасом, намного больше одного флапа
во-вторых при таком раскладе (один флап ровно в массив) буффер все равно очистится, я ведь использую первую перегрузку функци recieve, там влаг чтения None по умолчанию... Не могу понять smile

Автор: mr.DUDA 4.1.2006, 21:47
Наверное, стоит поспрашивать в разделе по сетям... Лично мои познания в сокетах на этом ограничиваются, слишком мало дела я с ними имел... smile

Автор: Kergan 10.1.2006, 18:35
Нашел... ну, не документацию - ее, видимо, пока нет... в смысле для таких деталей... короче, буферизация там не множественная, но буффер чтения делится на множество частей, причем не по TCP пакетам, а по пакетам верхнего уровня (в случае с ICQ - FLAP-пакетам) если в АСКД битах TCP пакета содержится о них информация. Короче, класс Socket реализован на удивление качественно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)