crossplatform.ru

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

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Передача данных в отдельном потоке. Сервер не успевает обработать данные.
kibsoft
  опции профиля:
сообщение 16.4.2010, 0:25
Сообщение #21


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


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() - не помогает, из-за чего такое может быть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.4.2010, 7:07
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Посмотри эту тему, там я выкладывал архивы с тестовым проектом, передающим файл:
http://www.forum.crossplatform.ru/index.ph...c=4296&st=0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 16.4.2010, 19:14
Сообщение #23


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Цитата(BRE @ 16.4.2010, 8:07) *
Посмотри эту тему, там я выкладывал архивы с тестовым проектом, передающим файл:
http://www.forum.crossplatform.ru/index.ph...c=4296&st=0

Спасибо! Под себя немного переделал, все работает! И последний вопрос, но не о программировании: какими частями лучше передавать файл (сколько байт), если ориентироваться на LAN-сеть? Или 64Кб нормально как в вашем коде?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.4.2010, 19:19
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kibsoft @ 16.4.2010, 20:14) *
Спасибо! Под себя немного переделал, все работает! И последний вопрос, но не о программировании: какими частями лучше передавать файл (сколько байт), если ориентироваться на LAN-сеть? Или 64Кб нормально как в вашем коде?

Стек TCP сам будет этим рулить, в зависимости от пропускной способности.
Смысл чтения по частям больше в том, что бы не загружать большие файлы в память сразу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 16.4.2010, 19:28
Сообщение #25


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Цитата
Стек TCP сам будет этим рулить, в зависимости от пропускной способности.

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

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

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

В run() я запускаю цикл событий exec(), но явно сам его не завершаю, но все-таки после передачи файла объект(fileSender) сам уничтожается (вывел на консоль из деструктора). Это мне не мешает, но я просто не пойму почему он завершается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.4.2010, 19:37
Сообщение #26


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kibsoft @ 16.4.2010, 23:28) *
после передачи файла
может это событие где-то останавливает поток.
(коль скоро ты используешь чужой код, может ты его не полностью изучил)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.4.2010, 19:39
Сообщение #27


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Без кода я затрудняюсь ответить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 16.4.2010, 19:46
Сообщение #28


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


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


:lol: сам несколько минут назад соединил обрыв сокета со слотом quit() и забыл..извиняюсь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 2:52