Russian Qt Forum

Qt => Работа с сетью => Тема начата: dread от Март 01, 2007, 07:53



Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: dread от Март 01, 2007, 07:53
Возникла проблема:
клиент -> сервер
клиент делает запрос
connectToHost()
далее получает от сервера данные
client -> write(const char, size);
но!!!!!
за частую данные не доходят до клиента - пока команда не будет выполнена еще раз - или несколько раз - и тогда клиент получает сразу все сообщения... реализованно через сигнал readyRead()

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


Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: Dodge от Март 16, 2007, 12:17
юзай client->flash() и читай внимательно документацию.
З.Ы. Для справки: в виндовс, если размер передаваемых данных свыше 48кБ то дэйтаграмма разбивается на части размером по 48кБ.


Название: Re: 4.2.2 Задержка при передаче через сокеты
Отправлено: SLiDER от Март 16, 2007, 13:41
Цитата: "dread"
Возникла проблема:
клиент -> сервер
клиент делает запрос
connectToHost()
далее получает от сервера данные
client -> write(const char, size);
но!!!!!
за частую данные не доходят до клиента - пока команда не будет выполнена еще раз - или несколько раз - и тогда клиент получает сразу все сообщения... реализованно через сигнал readyRead()

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


На самом деле доходит все, особенно после flush. Но вот колличество полученных вами сигналов может существенно отличатьсч от колличества посланных блоков данных, протокол то потоковый. Для определения колличества доступных на данный момент байт в сокете пользуйтесь методом bytesAvailable.


Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: dread от Март 19, 2007, 04:44
Еще одна странная ошибка:
- иногда команда ->write() сообщает об ошибке connectedStatus - хотя коннект есть и только что команда была выполнена...
- самое странное что подобная ошибка после появления стабильно проявляеться - и устраняеться только 2мя способами:
1) перезагрузка
2) смена номера порта
... в чем может быть причина?
порт фиксированный на сервере - по нему создаеться постоянно множество соединений и тут же разрываеться... попытка одновременного доступа - среди ПО исключена... может кто подскажет из за чего происходит по видимому блокировка сокета?
или я ошибаюсь??? помогите если кто знает пожалуйста


Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: Dodge от Март 19, 2007, 13:05
судя по всему не освобождается порт... какая платформа?


Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: dread от Март 20, 2007, 07:46
Windows 2000 / XP


Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: Dodge от Март 21, 2007, 12:12
Цитата: "dread"
Windows 2000 / XP

а можно посмотреть весь код. =)


Название: 4.2.2 Задержка при передаче через сокеты
Отправлено: dread от Март 23, 2007, 04:45
а что код
-ConnectToHost()
programm
-DisconnectFromHost()
...
потом повторить...