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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка успешной отправки данных через TCP/IP [Решено]  (Прочитано 3969 раз)
Luck
Гость
« : Ноябрь 21, 2009, 12:51 »

Я пишу TCP/IP сервер. Он отправляет QByteArray через сокет клиенту. Мне нужно проверить, успешно ли прошла отправка. Кто-нибудь подскажет, как это сделать?

Код:
    
    QByteArray sendP = forSend();
    QDataStream out(&sendP, QIODevice::WriteOnly);
    
    out << (quint16)0;
    out.device()->seek(0);
    out << (quint16)(sendP.size() - sizeof(quint16));
    
    m_ClientSocket->write(sendP); // это место должно проверяться
« Последнее редактирование: Ноябрь 21, 2009, 13:20 от Luck » Записан
BRE
Гость
« Ответ #1 : Ноябрь 21, 2009, 12:58 »

Я пишу TCP/IP сервер. Он отправляет QByteArray через сокет клиенту. Мне нужно проверить, успешно ли прошла отправка. Кто-нибудь подскажет, как это сделать?
Пусть клиент отправит подтверждение о том, что он успешно получил данные.
Записан
Luck
Гость
« Ответ #2 : Ноябрь 21, 2009, 13:03 »

Нет, мне нужна именно проверка отправки.
Записан
BRE
Гость
« Ответ #3 : Ноябрь 21, 2009, 13:05 »

Нет, мне нужна именно проверка отправки.
Так write тебе сообщает сколько байт он действительно записал в сокет или -1 если произошла ошибка.
Записан
Luck
Гость
« Ответ #4 : Ноябрь 21, 2009, 13:12 »

Так write тебе сообщает сколько байт он действительно записал в сокет или -1 если произошла ошибка.

т.е. можно сделать так?
Код:
QByteArray sendP = forSend();
    QDataStream out(&sendP, QIODevice::WriteOnly);
   
    out << (quint16)0;
    out.device()->seek(0);
    out << (quint16)(sendP.size() - sizeof(quint16));
   
    if(!(m_ClientSocket->write(sendP)))
    {
          ... //Error
    }

Записан
BRE
Гость
« Ответ #5 : Ноябрь 21, 2009, 13:15 »

Если write возвращает -1, то это означает ошибку и то что ни одного байта не записалось.
Если возвращает другое число, то это означает сколько байт реально записалось в сокет. Это значение может быть меньше того, которое ты хотел записать и означает, что остальные данные нужно записать позже.
В Qt запись в сокет буферизируется, т.е. сама библиотеке будет пытаться записать все данные. Проверяй на -1.
Почитай по-больше про сокеты.
« Последнее редактирование: Ноябрь 21, 2009, 13:17 от BRE » Записан
Luck
Гость
« Ответ #6 : Ноябрь 21, 2009, 13:16 »

спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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