Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 26.07.2017, 20:29   #1
SAMOUCHKA
Участник клуба
 
Регистрация: 07.08.2011
Адрес: Димитровград
Сообщений: 503
Репутация: 91

skype: ilya10009
По умолчанию QTcpSocket окончание передачи данных

Вот так передаются данные
Код:

void sendToClient(const QString &str_message)
{
    socket->write(str_message.toLocal8Bit());
}

Как узнать что сокет закончил передачу всех данных?

Вообще тут вопрос даже в том- как узнать, что сокет занят приемом или передачей данных?
__________________
eremeew.ilya@yandex.ru

Последний раз редактировалось SAMOUCHKA; 26.07.2017 в 20:48.
SAMOUCHKA вне форума   Ответить с цитированием
Старый 27.07.2017, 08:19   #2
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,319
Репутация: 1387
По умолчанию

А сокеты у вас блокирующие или не блокирующие(асинхронные)?
Для асинхронных делаем как описано в: https://wiki.qt.io/Threads_Events_QObjects/ru
Второй вариант, вы можете реализовать квитирование в своём прикладном протоколе.
Заводим объект с состоянием сокета и меняем его.

Цитата:
Вообще тут вопрос даже в том- как узнать, что сокет занят приемом или передачей данных?
А смысл? Tcp - это полнодуплексный протокол в нём приём и передача идут паралельно.

Любая синхронизация снижает скорость работы.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 27.07.2017, 12:48   #3
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,214
Репутация: 1578
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
Как узнать что сокет закончил передачу всех данных?
В принципе для этого есть вызов shutdown() но он похоже в Qt не используется.
Вам остается самому реализовать в своем протоколе сигнал "у меня нет больше данных для отправки", либо изначально сообщать ожидаемый объем данных.
waleri вне форума   Ответить с цитированием
Старый 27.07.2017, 14:08   #4
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 616
Репутация: 145
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
В принципе для этого есть вызов shutdown() но он похоже в Qt не используется.
Вам остается самому реализовать в своем протоколе сигнал "у меня нет больше данных для отправки", либо изначально сообщать ожидаемый объем данных.
..не совсем так, передатчик должен вызвать shutdown(), тем самым сигнализируя - все.
Т.е. ваш прикладной протокол может иметь 1 из следующих возможностей:

1. Самое простое - по окончании записи вызывает shutdown - т.е. рвет соединение.
2. Пишет сначала длину, потом данные.
3. Пишет данные и оканчивает их терминальным условным символов.
4. Пишет блоки фиксированой длины.

Эта схема вообще на любых языках/библиотеках применяется для работы с сетью (в т.ч., например, с кабелем COM).

Последний раз редактировалось alexzk; 27.07.2017 в 14:10.
alexzk вне форума   Ответить с цитированием
Старый 27.07.2017, 17:55   #5
SAMOUCHKA
Участник клуба
 
Регистрация: 07.08.2011
Адрес: Димитровград
Сообщений: 503
Репутация: 91

skype: ilya10009
По умолчанию

Сокеты асинхронные.

Цитата:
Tcp - это полнодуплексный протокол в нём приём и передача идут паралельно.
То есть возможен одновременный прием и передача?
__________________
eremeew.ilya@yandex.ru
SAMOUCHKA вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передачи данных Eihmann Помощь студентам 0 12.03.2013 22:20
Скорость передачи данных Человек_Борща Работа с сетью в Delphi 4 23.12.2012 18:51
Порядок передачи данных.+ Farrel Assembler 1 13.05.2011 19:11
Странные передачи данных bulldog5293 Работа с сетью в Delphi 14 29.11.2010 00:33




08:19.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru