![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
kibsoft |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Есть сервер и клиент (отсылает данные, например файл):
Клиент:
На сервере есть слот, соединенный с сигналом readyRead сокета, но видимо данные приходят так быстро, что сервер не успевает сделать нужные действия (а именно записать на диск). Что можно придумать? Можно ли как то на клиенте узнать считаны ли данные сервером или нет(и ждать этого момента)? В голову приходит только одно: от сервера высылать уведомление о принятых данных, чтобы клиент мог дальше передавать их (но мне кажется, что что-то не то). |
|
|
![]() |
BRE |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Покажи как читаются данные на другой стороне.
|
|
|
kibsoft |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Проверь несколько раз, сколько байт (какими порциями) реально читает эта функция из сокета:
|
|
|
kibsoft |
![]()
Сообщение
#5
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Проверь несколько раз, сколько байт (какими порциями) реально читает эта функция из сокета:
Read data size from socket: 1024 Read data size from socket: 0 Файл 59 Кб. Все рушится после 2 раза вызова слота обработки (readBytes), т.е. первый раз приходит как положено 1031 байт(вместе с nextBlockSize), при следующем вызове слота в nextBlockSize появляется 30 тысяч с лишним байт (размер следующего блока), потом if(tcpSocket->bytesAvailable()<nextBlockSize) break; тут пару раз происходит выход из слота, т.к.30 тысяч байт еще не пришли, а потом выходит косяк с этим: в reguest вместо 0 или 1 попадает 97 вроде.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 15.6.2025, 11:49 |