crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Передача данных в отдельном потоке. Сервер не успевает обработать данные.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kibsoft Дата 16.4.2010, 19:46
 
Цитата(Litkevich Yuriy @ 16.4.2010, 20:37) *
Цитата(kibsoft @ 16.4.2010, 23:28) *
после передачи файла
может это событие где-то останавливает поток.
(коль скоро ты используешь чужой код, может ты его не полностью изучил)


:lol: сам несколько минут назад соединил обрыв сокета со слотом quit() и забыл..извиняюсь
BRE Дата 16.4.2010, 19:39
  Без кода я затрудняюсь ответить.
Litkevich Yuriy Дата 16.4.2010, 19:37
 
Цитата(kibsoft @ 16.4.2010, 23:28) *
после передачи файла
может это событие где-то останавливает поток.
(коль скоро ты используешь чужой код, может ты его не полностью изучил)
kibsoft Дата 16.4.2010, 19:28
 
Цитата
Стек TCP сам будет этим рулить, в зависимости от пропускной способности.

Понятно.
Цитата
Смысл чтения по частям больше в том, что бы не загружать большие файлы в память сразу.

Да, это я знал :)

Нарушу правила, не буду создавать новую тему:
connect(fileSender,SIGNAL(finished()),fileSender,SLOT(deleteLater())); //fileSender это поток

В run() я запускаю цикл событий exec(), но явно сам его не завершаю, но все-таки после передачи файла объект(fileSender) сам уничтожается (вывел на консоль из деструктора). Это мне не мешает, но я просто не пойму почему он завершается?
BRE Дата 16.4.2010, 19:19
 
Цитата(kibsoft @ 16.4.2010, 20:14) *
Спасибо! Под себя немного переделал, все работает! И последний вопрос, но не о программировании: какими частями лучше передавать файл (сколько байт), если ориентироваться на LAN-сеть? Или 64Кб нормально как в вашем коде?

Стек TCP сам будет этим рулить, в зависимости от пропускной способности.
Смысл чтения по частям больше в том, что бы не загружать большие файлы в память сразу.
kibsoft Дата 16.4.2010, 19:14
 
Цитата(BRE @ 16.4.2010, 8:07) *
Посмотри эту тему, там я выкладывал архивы с тестовым проектом, передающим файл:
http://www.forum.crossplatform.ru/index.ph...c=4296&st=0

Спасибо! Под себя немного переделал, все работает! И последний вопрос, но не о программировании: какими частями лучше передавать файл (сколько байт), если ориентироваться на LAN-сеть? Или 64Кб нормально как в вашем коде?
BRE Дата 16.4.2010, 7:07
  Посмотри эту тему, там я выкладывал архивы с тестовым проектом, передающим файл:
http://www.forum.crossplatform.ru/index.ph...c=4296&st=0
kibsoft Дата 16.4.2010, 0:25
 
QFile file(filePath);
    if (file.open(QIODevice::ReadOnly)) {//если файл открылся
        char b[1025];
        char *bytes=b;

        while(!file.atEnd()) {//пока не конец файла
           file.read(bytes,1024);//читаем по килобайту
            tcpSocket->write(bytes);
        }

        file.close();//закрываем файл
    }


Сделал, чтобы просто байты отсылались без всяких структур типа QByteArray, но в сокет(tcpSocket->write(bytes);) пишется меньше данных чем было прочитано в bytes.. ПРобовал flush() - не помогает, из-за чего такое может быть?
kibsoft Дата 14.4.2010, 16:36
  BRE, спасибо за разные подсказки! Сейчас посидел, подумал - неправильно вообще я алгоритм организовал, понял в чем дело, буду перерабатывать. Загвоздка как раз в типе запроса(request).
kibsoft Дата 14.4.2010, 15:08
  Вы уже это писали :) Я же сказал, что еще вчера это исправил, но все равно не работает. У меня с quint8 сейчас.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 18:28