[Windows] Сеть к хосту не работает - PullRequest
0 голосов
/ 01 февраля 2010

Значение равно 10240 или 2800 в шестнадцатеричном формате. TOTAL_LENGTH - это неподписанный шорт. 0028 в десятичном виде это 40, что я ожидаю (или, по крайней мере, разумное значение).

Есть идеи, почему я получаю 0 вместо 40? Думаю о том, чтобы поменять местами, но на самом деле не хочу. XD

unsigned short total_length = ntohl(ipData->TOTAL_LENGTH);

Это заголовки, которые я включаю.

#include <winsock2.h>
#include <ws2tcpip.h>

Ответы [ 3 ]

1 голос
/ 01 февраля 2010
u_long WSAAPI ntohl(
  __in  u_long netlong
);

Результат длинный, и вы назначаете его короткому. Проверьте, не обрезано ли оно.

Кроме того, если это короткий, то почему вы не используете ntohs ?

0 голосов
/ 01 февраля 2010

В связи с ответом Корнеля, вам необходимо знать, как хранятся данные, одна большая ошибка состоит в том, что вы считаете, что данные соответствуют вашим ожиданиям. Разные платформы, разные процессоры, ключевое слово endianess . Некоторые сохраняются от старшего к младшему байту, другие сохраняются от младшего к старшему байту. Это единственная цель использования ntohs и семьи. Смотрите здесь для подробного использования его Beej , сайт сетевого программирования.

Кстати, вы можете использовать это как отдельную функцию, если, скажем, обрабатывая файл данных с другой платформы с другим порядком байтов, вы можете использовать это для преобразования данных в архитектуру с прямым порядком байтов до обработки. Это не наносит ущерба накладным расходам и гарантирует успешную обработку данных.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 01 февраля 2010

попробуйте ntohs. Он был построен для шорт. Я предполагаю, что это имеет значение, так как они потрудились сделать функции для разных типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...