Russian Qt Forum
Ноябрь 23, 2024, 15:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Теряется часть пакетов при работе с TcpSocket через интернет  (Прочитано 14254 раз)
SABROG
Гость
« Ответ #15 : Апрель 06, 2010, 22:34 »

Та вообще-то всё это должен делать TCP. Он каждый пакет нумерует, отсылает, ждет подтверждение получения (ACK), если ACK не получен, то данные отсылает повторно.
А как тогда объяснить поведение того же Firefox? Я жму ссылку, ничего не происходит секунд 10, затем открываю вторую вкладку и жму ссылку там еще раз - на этот раз всё ОК. А вот в первой вкладке по прошествии 60 секунд выдает "невозможно соединиться с сервером". То есть он даже не пытается в течении целой минуты повторно что-либо послать, тупо сидит и ждет.
Записан
Zmeishe
Гость
« Ответ #16 : Апрель 07, 2010, 12:33 »

Если на "гнилых" сетях и "тощих" каналах теряются пакеты, следует зажать MTU на клиенте.
В TCP размер пакета для виндовоза по умолчанию 8К. Во внутренней сетке такие пакеты со свистом пролетают.
На модемных соединениях надо уменьшать размер пакета.
Для виндовоза MTU в реестре устанавливается.
Для Linux он по умолчанию 1.5К и ничего менять на надо.
« Последнее редактирование: Апрель 07, 2010, 12:35 от Zmeishe » Записан
AntonUfo
Гость
« Ответ #17 : Апрель 13, 2010, 08:07 »

Если на "гнилых" сетях и "тощих" каналах теряются пакеты, следует зажать MTU на клиенте.

пипец, но это же как бы не выход наверное..., неужели никто не сталкивался....Грустный
Записан
Zmeishe
Гость
« Ответ #18 : Апрель 13, 2010, 08:50 »

В том то и дело, что сталкивался. Ещё на Qt3 в 2006 году сталкивался.
И эта проблема к Qt не имеет отношения. Поэтому средствами Qt решать её не имеет смысла.
Тут приводили пример с браузером. Но браузер использует протокол http.
Возможно http умеет на низком уровне изменять размер пакета tcp, т.к. http только надстройка над tcp.

Классы QTcpSocket и QTcpServer наверняка используют прямой сетевой API операционки.
Либо наследоваться от QTcpSocket и копать глубины API каждой операционки, либо изменить MTU в настройках операционки.
Когда сервер "снюхивается" с клиентом, они выбирают минимальный MTU, на котором они могут гарантированно инфу гонять.
Попробуй зажать на сервере, тогда с каждым клиентом не надо будет мерятся - у кого толще  Улыбающийся и почему пакеты теряются.

Наши админы зажимают только на "тощих" каналах из губернии в город. У городских клиентов не трогаем. А на серваке по умолчанию.
« Последнее редактирование: Апрель 13, 2010, 08:57 от Zmeishe » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.