Название: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: l_a_m от Апрель 21, 2010, 11:42 Доброе время суток ув. Коллеги!
суть вопроса следующая: разрабатываю клиент-серверное приложение, требуется сделать приложение смешанного типа (как принимать запросы и выдавать ответы, так и генерировать свои запросы при некоторых условиях). Данные должны течь используя TCP протокол. Пока-что хотелось бы реализовать банальный сервер: ставлю сервер на прослушивание, получаю новое соединение, прослушиваю запрос - выдаю ответ, прослушиваю запрос - выдаю ответ и т.д. (соединение не рвём). Пока получается сделать следующее: ставлю сервер на прослушивание, получаю новое соединение, прослушиваю запрос - выдаю ответ, рву соединение (если этого не сделать - ответ не отсылается, по какой-то неведанной мне причине). может быть кто сталкивался с такой проблемой, где тут собака зарыта? :-) зы: Qt Version 4.6.2, ОС(сервера разрабатываемого мной) - Windows ХР(возможны варианты кроссплатформенности), клиент - любая ОС, в том числа внешнее устройство с жестко закодированной логикой. я сейчас делаю примерно так: Код: void myServer::newConnectionBegin() Код: connect(&serv, SIGNAL(newConnection()), this, SLOT(newConnectionBegin())); Название: Re: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: BRE от Апрель 21, 2010, 12:10 Попробуй после write делать flush.
Название: Re: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: l_a_m от Апрель 21, 2010, 12:14 Попробуй после write делать flush. пробовал - не помогает, какие ещё варианты могут быть? :-)Название: Re: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: ilyagoo от Апрель 21, 2010, 12:44 BRE прав.
смотри как ты отправляешь и получаешь данные, целиком ли? прилепи к данным заголовок с размером и жди, пока не плучишь сообщение полностью. Название: Re: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: l_a_m от Апрель 21, 2010, 13:00 BRE прав. Данные в принципе не отправляются, если не делать дисконнект. (слушал и снифером и писал клиента, результат один - не работает :()смотри как ты отправляешь и получаешь данные, целиком ли? прилепи к данным заголовок с размером и жди, пока не плучишь сообщение полностью. Название: Re: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: BRE от Апрель 21, 2010, 13:05 Отправка данных происходит асинхронно, при возврате в цикл обработки событий, write только сохраняет данные во внутренние буферы.
flush должен принудительно вытолкнуть их в сокет, почему у тебя это не происходит... вопрос? Если хочется синхронной работы, попробуй после write дождаться реальной отправки данных: смотри bool QIODevice::waitForBytesWritten ( int msecs ) [virtual] Название: Re: QTcpSocket - НИ ЕДИНОГО РАЗРЫВА!!! :-) Отправлено: l_a_m от Апрель 21, 2010, 13:18 Отправка данных происходит асинхронно, при возврате в цикл обработки событий, write только сохраняет данные во внутренние буферы. flush должен принудительно вытолкнуть их в сокет, почему у тебя это не происходит... вопрос? Если хочется синхронной работы, попробуй после write дождаться реальной отправки данных: смотри bool QIODevice::waitForBytesWritten ( int msecs ) [virtual] к синхронности не стремлюсь... а вот по поводу принудительного вбрасывания в сокет - это я уже читал, но вот он гад не выплёвывает нефига :-( почему, понять не могу... данные из буфера принудительно выплёвываются в сокет в 2-х случаях (если я не ошибаюсь), это при вызове flush и при разрыве соединения, при разрыве соединения - всё в норме, данные текут, а вот при вызове flush - почему-то нефига не идёт :-( |