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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: 4.2.2 Задержка при передаче через сокеты  (Прочитано 6613 раз)
dread
Гость
« : Март 01, 2007, 07:53 »

Возникла проблема:
клиент -> сервер
клиент делает запрос
connectToHost()
далее получает от сервера данные
client -> write(const char, size);
но!!!!!
за частую данные не доходят до клиента - пока команда не будет выполнена еще раз - или несколько раз - и тогда клиент получает сразу все сообщения... реализованно через сигнал readyRead()

как добиться - отправил байт - тут же его получил?
Записан
Dodge
Гость
« Ответ #1 : Март 16, 2007, 12:17 »

юзай client->flash() и читай внимательно документацию.
З.Ы. Для справки: в виндовс, если размер передаваемых данных свыше 48кБ то дэйтаграмма разбивается на части размером по 48кБ.
Записан
SLiDER
Гость
« Ответ #2 : Март 16, 2007, 13:41 »

Цитата: "dread"
Возникла проблема:
клиент -> сервер
клиент делает запрос
connectToHost()
далее получает от сервера данные
client -> write(const char, size);
но!!!!!
за частую данные не доходят до клиента - пока команда не будет выполнена еще раз - или несколько раз - и тогда клиент получает сразу все сообщения... реализованно через сигнал readyRead()

как добиться - отправил байт - тут же его получил?


На самом деле доходит все, особенно после flush. Но вот колличество полученных вами сигналов может существенно отличатьсч от колличества посланных блоков данных, протокол то потоковый. Для определения колличества доступных на данный момент байт в сокете пользуйтесь методом bytesAvailable.
Записан
dread
Гость
« Ответ #3 : Март 19, 2007, 04:44 »

Еще одна странная ошибка:
- иногда команда ->write() сообщает об ошибке connectedStatus - хотя коннект есть и только что команда была выполнена...
- самое странное что подобная ошибка после появления стабильно проявляеться - и устраняеться только 2мя способами:
1) перезагрузка
2) смена номера порта
... в чем может быть причина?
порт фиксированный на сервере - по нему создаеться постоянно множество соединений и тут же разрываеться... попытка одновременного доступа - среди ПО исключена... может кто подскажет из за чего происходит по видимому блокировка сокета?
или я ошибаюсь??? помогите если кто знает пожалуйста
Записан
Dodge
Гость
« Ответ #4 : Март 19, 2007, 13:05 »

судя по всему не освобождается порт... какая платформа?
Записан
dread
Гость
« Ответ #5 : Март 20, 2007, 07:46 »

Windows 2000 / XP
Записан
Dodge
Гость
« Ответ #6 : Март 21, 2007, 12:12 »

Цитата: "dread"
Windows 2000 / XP

а можно посмотреть весь код. =)
Записан
dread
Гость
« Ответ #7 : Март 23, 2007, 04:45 »

а что код
-ConnectToHost()
programm
-DisconnectFromHost()
...
потом повторить...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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