Доброго всем времени суток! У меня такая проблема: есть UDP клиент который переводит количество время в количество секунд и раскидывает на трехбайтные слова и отсылает, в принципе работает (проверял сниффером), но для наглядности код такой:
int t=3600*timeHspinBox->value() +60*timeMspinBox->value() + timeSspinBox->value();
int t1,t2,t3;
t3=t %pow(2,8);
t2=(t/pow(2,8))%256;
t1=(t/pow(2,16))%256;
char buf[4]={2,t1,t2,t3};
udpsocket->qsenddata(str, buf,4);
функция qsenddata
void qsenddata(QString str, char msg[], int n){
QUdpSocket *udpSocket;
const QHostAddress address=QHostAddress(str);
char buf[100];
memset(buf, 0, 100);
for (int i=0;i<n;i++) {
buf[i]=msg[i];
}
qint64 size=100;
quint16 dport=45454;
udpSocket = new QUdpSocket(this);
udpSocket->writeDatagram(buf,size,address,dport);
проблема в следующем : есть серверная часть (приведу только значимые места кода):
struct Forsend {
QString ipadr;
char ipdat[10];
};
....................
void processDatagrams() {
Forsend senda;
while (udpSocket->hasPendingDatagrams()) {
QHostAddress adr;
quint16 prt;
udpSocket->readDatagram(senda.ipdat,10,&adr,&prt);
senda.ipadr =adr.toString();
QMessageBox msgBox;
int index;
QString ts;
index =senda.ipdat[3]+senda.ipdat[2]*256+senda.ipdat[1]*256*256;
ts.setNum(index);
msgBox.setText(ts);
msgBox.exec();
emit returndata(senda);
}
}
Так вот проблема в том, что данные считываемые в senda.ipdat не всегда соответствуют переданным. Пробовал считывать просто в массив char и в QByteArray, эффект тот же. Есть подозрение что при приеме пакета данные по особому "распаковываются", но некоторые значение времени передаются точно, а некоторые нет. Я в программировании совсем новичок и может здесь куча ошибок. Спасибо заранее.