Winsock. Проблема передачи значания переменной DWORD

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
engine
Сообщения: 13
Зарегистрирован: 10 фев 2008, 17:50

У меня клиент-серверное приложение передачи файлов по сети. Файл передается от сервера к клиенту. Перед передачей самого файла сервер отправляет его размер в переменной DWORD следующим образом:

Код: Выделить всё

DWORD dwSizeFile=GetFileSize(hFile,NULL);//определяем размер файла
send(Sock,(char*)&dwSizeFile,4,0);//отправляем размер файла
А клиент получает эти данные вот так:

Код: Выделить всё

char sSizeFile[4];
recv(Sock,sSizeFile,4,0);
DWORD dwSizeFile=(int)*sSizeFile;
И если размер файла равен 5, то все работает нормально, клиент получает число dwSizeFile=5. А вот если передается число 45056, то клиент получает dwSizeFile=0, а если смотреть по-байтово переменную sSizeFile, то получаем:

Код: Выделить всё

dwSizeFile[0]=0
dwSizeFile[1]=-80'°'
dwSizeFile[2]=0
dwSizeFile[3]=0
Может я что-то делаю не правильно?
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

потому что в
DWORD dwSizeFile=(int)*sSizeFile;
ты тоько dwSizeFile[0] преобразуеш в int
должно работать так
DWORD dwSizeFile=*((int*)sSizeFile);
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Зачем вообще при приеме связываться с массивом char, а потом перегонять данные в переменную типа DWORD?
Не проще ли сразу написать вот так:

Код: Выделить всё

DWORD dwSizeFile;
recv(Sock, (char*)(&dwSizeFile), sizeof(dwSizeFile), 0);
Ответить