Вообщем вылазят какие-то ошибки ("Обнаружена ошибка отправить отчет...") при работе с сокетами.
Если ничего не передавать ошибок нет. Пакеты упаковываю так:
bool SendPakToServer(QString msg){
QByteArray ba_data("");
ba_data.append(msg);
unsigned int data_size_int = ba_data.length();
char *ba = ba_data.data();
char *data = new char(data_size_int + 8);
memcpy(data, &data_size_int, 4);
memcpy(data + 4, ba, data_size_int);
csocket->write(QByteArray::fromRawData(data, data_size_int + 4));
delete []data; delete []ba;
return true;
}
void DataRecive(){
QByteArray incoming = chache_incoming + csocket->readAll();
char *data = incoming.data();
qint64 data_size = incoming.length();
bool readed = true;
while(readed && data_size) {
readed = false;
if(data_size > 4) {
unsigned int size = 0;
memcpy(&size, data, 4);
if(data_size >= size + 4){
data_size -= size + 4;
DecodePak(incoming.mid(4, size));
if(data_size > 0) {
incoming = incoming.mid(size + 4, data_size);
data = new char(incoming.length());
data = incoming.data();
readed = true;
} else break;
}
}
}
delete []data;
if(data_size > 0) {
chache_incoming = incoming.mid(0, data_size);
} else chache_incoming = "";
}
Проблему решил методом тыка
bool SendPakToServer(QString msg){
QByteArray ba_data(""); ba_data.append(msg);
unsigned int data_size_int = ba_data.size();
char *data = new char(4);
memcpy(data, &data_size_int, 4);
csocket->write(data, 4);
csocket->write(ba_data.data(), ba_data.size());
delete []data;
return true;
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)