Russian Qt Forum
Ноябрь 24, 2024, 20:02
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Не корректно записываются данные в файл
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Не корректно записываются данные в файл (Прочитано 2580 раз)
yura91
Гость
Не корректно записываются данные в файл
«
:
Июнь 09, 2016, 17:57 »
Я передаю изображение с клиента андроид на TCP сервер Qt(так же вместе с ним передаются и текстовые данные
Передаю сначала ESC, размер изображения а потом сами данные. На сервере принимаю и порциями пишу в файл. Но на файле снизу постоянно появляется черная полоса как на скрине.
Ниже код сервера. Подскажите в чем у меня ошибка? Почему в файле отображается эта полоса что я не так делаю?
#include "server.h"
#include <iostream>
#include <cstdio>
#include "wavstructfile.h"
using namespace std;
#include <QDataStream>
#include <QImage>
#include <QPalette>
#include <QWidget>
#include <QByteArray>
#include <stdio.h>
QFile filetxt;
FILE*filesound;
FILE*writeJpg;
FILE*file;
int i;
int size;
int sizeBin;
const char STX = '\u0002';
const char ETX = '\u0003';
typedef enum {dmNone,dmBinary,dmText} TDataMode;
TDataMode Mode = dmNone;
const char ESC = 27;
char convert;
char* ptr;
int siz;
int BufSize;
char buf[sizeof(double)];
double d;
//char* TextBuff;
int byteArrayToInt(QByteArray b)
{
return b[3] & 0xFF |
(b[2] & 0xFF) << 8 |
(b[1] & 0xFF) << 16 |
(b[0] & 0xFF) << 24;
}
Server::Server(QObject* parent): QObject(parent)
{
TDataMode Mode = dmNone;
i = 0;
BufSize = 0;
//QMessageBox msgBox;
const QString filename = "D:\\Contacts.txt";
filetxt.setFileName(filename);
filetxt.open(QIODevice::WriteOnly | QIODevice::Text);
if(!filetxt.isOpen()){
qDebug() << "- Error, unable to open" << "outputFilename" << "for output";
}
i = 0;
WAV_HEADER wav_hdr;
strncpy( wav_hdr.RIFF, "RIFF", 4 );
wav_hdr.ChunkSize = 36 + 655360;
strncpy( wav_hdr.WAVE, "WAVE", 4 );
strncpy( wav_hdr.fmt, "fmt ", 4 );
wav_hdr.Subchunk1Size = 16;
wav_hdr.AudioFormat = 1;
wav_hdr.NumOfChan = 1;
wav_hdr.SamplesPerSec = 44100;
wav_hdr.bytesPerSec = 44100 * 1 * 2;
wav_hdr.blockAlign = 2;
wav_hdr.bitsPerSample = 16;
strncpy( wav_hdr.Subchunk2ID, "data", 4 );
wav_hdr.Subchunk2Size = 655360;
writeJpg = fopen("D:\\photo.jpg", "wb");
if(writeJpg==NULL)
{
qDebug()<<"Ошибка откртия файла";
}
filesound = fopen("D:\\test.wav", "wb");
if(filesound==NULL)
{
qDebug()<<"Ошибка откртия файла";
}
int sz = fwrite(&wav_hdr, 1,sizeof (wav_hdr), filesound);
connect(&server, SIGNAL(newConnection()),
this, SLOT(acceptConnection()));
server.listen(QHostAddress::Any, 8888);
qDebug() << "listen ok";
}
Server::~Server()
{
fclose(filesound);
filetxt.close();
server.close();
}
void Server::acceptConnection()
{
client = server.nextPendingConnection();
//vec.push_back(client);
int descript = client->socketDescriptor();
SClients[descript]=client;
connect(SClients[descript], SIGNAL(readyRead()),
this, SLOT(startRead()));
connect(SClients[descript], SIGNAL(disconnected()), SClients[descript]
, SLOT(deleteLater()));
// SClients[descript]->write("Yes excellent connection plus five");
// SClients[descript]->disconnectFromHost();
qDebug() << "Accept ok\n";
qDebug() << descript << "\n";
//qDebug() << i << "\n";
/*connect(client, SIGNAL(readyRead()),
this, SLOT(startRead()));*/
//connect(client, SIGNAL(disconnected()), client, SLOT(deleteLater()));
// qDebug() << "Accept ok";
}
void Server::startRead()
{
QTcpSocket *clientSocket = (QTcpSocket*)sender();
QByteArray bytes1;
//QByteArray Data = clientSocket->readAll();
//qDebug() << " Data is: "<< Data;
// double s = 1;
//bytes = clientSocket->readAll();
//clientSocket ->read(buf,clientSocket->bytesAvailable());
//QDataStream os( bytes );
//char *p = (char*) &d;
//for (i = 0; i < sizeof(double); i++)
// p
= buf
;
//os >> s;
//qDebug() << d;
//bytes = clientSocket->readAll();
//clientSocket->write("Yes excellent connection");
//clientSocket->disconnectFromHost();
//qDebug() << ESC;
//qDebug() << Mode;
//qDebug() << Size;
bool End;
int j = 0;
QByteArray bytes = clientSocket->readAll();
//int sizebytes = bytes.length();
QString CurrentText="";
//qDebug() << bytes.length() << bytes.size();
int nSize = bytes.length();
qDebug() << bytes.length() << nSize;
char Buffer [nSize];
memcpy(Buffer, bytes.data(), nSize);
qDebug() << Buffer;
char* BufPtr = Buffer;
char *BufferEnd = BufPtr + nSize;
qDebug() << bytes.length() << nSize;
while ( BufPtr < BufferEnd )
{
char *TextPtr;
switch (Mode)
{
case dmText:
TextPtr = BufPtr;
while (*BufPtr != ETX && BufPtr < BufferEnd)
{
// j++;
BufPtr++;
}
End = *BufPtr == ETX;
*BufPtr=0;
CurrentText += TextPtr;
qDebug() << CurrentText;
if (End)
{
qDebug() << CurrentText;
if(filetxt.isOpen())
{
QTextStream outStream(&filetxt);
outStream << CurrentText;
}
CurrentText="";
Mode=dmNone;
}
// qDebug() << CurrentText;
break;
case dmBinary:
// qDebug() << "HereBin";
if(i == 0)
{
bytes1[0] = bytes[1];
bytes1[1] = bytes[2];
bytes1[2] = bytes[3];
bytes1[3] = bytes[4];
int blockSize = byteArrayToInt(bytes1);
sizeBin = blockSize;
qDebug() << sizeBin;
i++;
bytes.remove(0, 5);
qDebug() << nSize;
nSize = nSize - 5;
BufferEnd -= 5;
}
//while ( j < bytes.length() && BufSize != sizeBin ) //j++;
//while ( BufPtr < BufferEnd && BufSize != sizeBin )
while ( j < nSize && BufSize != sizeBin )
{
//siz = fwrite(bytes,bytes.length(),1,writeJpg);
siz = fwrite(bytes,nSize,1,writeJpg);
//siz = fwrite(bytes,1,1,writeJpg);
qDebug() << siz;
//BufSize += bytes.length();
//j += bytes.length();
//qDebug() << bytes.length() << nSize;
BufSize += nSize;
j += nSize;
BufPtr += nSize;
//BufSize += nSize;
//j++;
//BufPtr ++;
//BufSize++;
qDebug() << j << BufSize;
End = BufSize == sizeBin;
if (End)
{
if(writeJpg != NULL )
{
qDebug() << "Size has been reached";
// int sz = fwrite(bytes,nSize,1,writeJpg);
Mode=dmNone;
qDebug() << BufSize;
}
}
}
//Mode=dmNone;
break;
case dmNone:
qDebug() << "The End";
switch (*BufPtr){
case STX:
Mode=dmText;
qDebug() << "HelloText";
break;
case ESC:
Mode=dmBinary;
qDebug() << "HelloBin";
// BufPtr++;
break;
default:
qDebug() << "Unknown";
break;
}
BufPtr++;
qDebug() << "Increment";
}
}
}
Записан
yura91
Гость
Re: Не корректно записываются данные в файл
«
Ответ #1 :
Июнь 09, 2016, 18:01 »
Щас приложу другой скрин на этом не видно.
Записан
yura91
Гость
Re: Не корректно записываются данные в файл
«
Ответ #2 :
Июнь 09, 2016, 18:04 »
Просто у меня на изображении черная полоса снизу отображается. На скринах почему то не видно, но если скачать файл будет видно(внизу - черная полоса). Ну суть в том что если даже по одному байту все писать то получается поврежденный файл
«
Последнее редактирование: Июнь 09, 2016, 18:17 от yura91
»
Записан
yura91
Гость
Re: Не корректно записываются данные в файл
«
Ответ #3 :
Июнь 09, 2016, 18:16 »
То есть если в коде вместо siz = fwrite(bytes,nSize,1,writeJpg); поставить siz = fwrite(bytes,1,1,writeJpg); то jpg файл вообще получается поврежденный, хотя размер файла после siz = fwrite(bytes,nSize,1,writeJpg); как и после siz = fwrite(bytes,1,1,writeJpg); равен одному и тому же числу 36864 байт. Подскажите как исправить код, чтобы все записывалось в файл нормально??
Записан
yodu
Гость
Re: Не корректно записываются данные в файл
«
Ответ #4 :
Июнь 13, 2016, 13:50 »
Кшмар.
Что за треш в коде? для начала попробуй просто открыть один файл и переписать его содержимое в другой. А то у тебя в коде какая-то магия странная.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...