Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость приема данных по TCP, TCP долго копит в сокете данные 
:(
    Опции темы
Sality123
Дата 31.8.2012, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Всем привет, у меня есть два обычных подключения TcpClient() 
Код

sokSend = ConnectServer();
sokListen = ConnectServer();


в один я пишу
Код

NetworkStream stream = sokSend.GetStream();
if(stream.CanWrite)
{
    stream.Write(btSend,0,btSend.Length);
}


из другого читаю
Код

if(stream.DataAvailable)
{                
        Array.Clear(btReadBuffer,0,btReadBuffer.Length);
        int countStream = stream.Read(btReadBuffer, 0, btReadBuffer.Length);


сервер мне отправляет 30 раз в секунду пакеты по 50 байт. пакеты пронумерованы.
функцию чтения я вызываю гдето 50 раз в секунду, но так как стоит проверка stream.DataAvailable с сокета я читаю только когда мне открывается эта функция (хочу заметить не тогда када есть данные уже в сокете, так как первый прием пакета получается с куском следующего)

Все бы прекрасно, но полученные пакеты где то на 6-10 пакетов отстают от отправляемых сервером. уменьшая частоту отправки пакетов до 20 картина в разрыве отставания не изменилась, я сделал вывод, что при получении первого пакета сокет мне его не отдает, а ждет еще. Из за этого и получается сдвиг в полученых пакетах

Вопрос, есть ли возможность уменьшить читающий буфер, чтоб команда  stream.DataAvailable открывалась чаще, и я мог получить данные именно по приходу первого пакета, а не када накопится 5 и более штук
PM MAIL   Вверх
Sality123
Дата 31.8.2012, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Для теста замерял длину каждого пакета который я принимаю, и несмотря на то что сервер пакеты отправляет по 50 байт, мне приходят пакеты по 800 байт, тоесть сокет нагло накапливает данные перед отдачей. Есть ли способ нагло выдирать из потока данные у него?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.