Страница 1 из 1

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

Добавлено: 16 фев 2008, 13:50
engine
У меня клиент-серверное приложение передачи файлов по сети. Файл передается от сервера к клиенту. Перед передачей самого файла сервер отправляет его размер в переменной 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
Может я что-то делаю не правильно?

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

Добавлено: 16 фев 2008, 22:00
ssDev
потому что в
DWORD dwSizeFile=(int)*sSizeFile;
ты тоько dwSizeFile[0] преобразуеш в int
должно работать так
DWORD dwSizeFile=*((int*)sSizeFile);

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

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

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

DWORD dwSizeFile;
recv(Sock, (char*)(&dwSizeFile), sizeof(dwSizeFile), 0);