Я прочитал this explanation и this manual page об использовании htons
, htonl
, ntohl
и ntohs
, однако я до сих пор не в полной мере понять их использование (я совершенно новой для сокета API и сетевого программирования в целом) , Я понимаю маленький и большой порядок Endian и byte, но я не уверен, как правильно реализовать эти функции в моем коде приложения чата, поэтому он работает последовательно на разных компьютерах (где используется большой Endian, а другой мало используется).Решают между htons и Htonl
Небольшой контекст для моей конкретной ситуации; У меня есть (почти) полностью работающее приложение для чата, и я только что использовал htons
, но после некоторых исследований кажется, что это ненадежно. Я понимаю, что this question может показаться довольно похожим, однако здесь я спрашиваю о примере реализации, я уже знаю основную функцию этих вызовов.
* «но после некоторых исследований кажется, что это ненадежно» * Не уверен, что вы подразумеваете под этим. Пожалуйста, объясни. – user3386109
Я не имею в виду, что функция ненадежна, я имею в виду, что если я не использую правильную функцию, моя программа может отправлять неожиданные данные (неправильный порядок байтов). Пожалуйста, исправьте меня, если я ошибаюсь, но по первой ссылке, которую я предоставил, он сказал следующее: * «В результате это означает, что если вы отправляете() двухбайтный короткий int из коробки Intel на Mac (до того, как они стали Ящики Intel тоже, я имею в виду), то, что один компьютер считает номером 1, другой будет считать число 256, и наоборот.* " – carefulnow1
Когда вы собираетесь * отправлять * данные со своего хоста по сети, вы готовите его с помощью hton *. Когда вы получаете данные из своего хоста из сети, вы используете ntoh *. Вы выбираете версию' s', если данные находятся в 'коротком' (или, точнее,' int16_t') и 'l' варианте, если это' long'. Что насчет этого сбивает с толку? – rici