Nano Hash - криптовалюты, майнинг, программирование

htonl, ntohl, клиент и сервер NBO

Я пишу сервер и клиент, и мне нужно передать несколько целых чисел.

В моем серверном приложении я получаю целое число от клиента.

В клиенте я вызываю ntohl или htonl для целого числа? Если я вызову любой из них, когда я получу целое число, мне нужно снова вызвать ntohl или htonl? Или я могу вызывать ntohl/htonl только на стороне сервера, но не на стороне клиента?

Другими словами, когда/где и сколько раз я использую htonl или ntohl для каждого целого числа?

Кроме того, нужно ли делать ntohl/htonl для массивов строк/символов? Должны ли символы быть преобразованы?


Ответы:


1

В клиенте я вызываю ntohl или htonl для целого числа?

Это не имеет ничего общего с тем, являетесь ли вы клиентом или сервером. Это связано с тем, отправляете вы или получаете. Если вы отправляете, вам нужен сетевой порядок байтов, поэтому вы вызываете htonl(). Если вы получаете, вы хотите принять заказ, поэтому вы звоните ntohl().

Если я вызову любой из них, когда я получу целое число, мне нужно снова вызвать ntohl или htonl?

да. Отправитель должен был поместить данные в сетевой порядок байтов; получатель должен поставить его в порядок хоста для своего локального хоста.

Другими словами, когда/где и сколько раз я использую htonl или ntohl для каждого целого числа?

htonl() при отправке; ntohl() при получении.

19.05.2013

2

При отправке целого числа всегда вызывайте hton...(), чтобы убедиться, что байты преобразуются из собственного порядка байтов отправляющей машины в сетевой порядок байтов.

При чтении целого числа всегда вызывайте ntoh...(), чтобы убедиться, что байты преобразуются из сетевого порядка байтов в собственный порядок байтов принимающей машины.

На машинах, где собственный порядок байтов совпадает с порядком байтов в сети, функции реализованы как no-ops. На машинах, где собственный порядок байтов не совпадает, функции выполняют обмен байтами.

18.05.2013

3

Типичная настройка в этом сценарии будет заключаться в вызове htonl на клиенте (поскольку вы хотите поместить целое число в сетевой, то есть в порядке протокола) и ntohl на сервере (поскольку вы хотите вернуться от сетевого к хостовому заказу).

Для строк нет эквивалента ntohl и т. д. (хотя вам необходимо договориться о том, чтобы клиент и сервер согласовали используемую кодировку символов, т. Е. Обе стороны использовали UTF-8).

18.05.2013
  • Для строк только кодировки UTF-16/32 зависят от порядка байтов, так как они оба используют многобайтовые кодовые единицы. Другие кодировки UTF и все кодировки ANSI/ISO вместо этого используют однобайтовые кодовые единицы. Функции hton... и ntoh... можно использовать с данными UTF-16/32, просто вызывайте их для каждого кодового модуля. Это потребуется только при преобразовании UTF-16/32 LittleEndian в UTF-16/32 BigEndian и наоборот. 18.05.2013
  • @RemyLebeau. хорошее замечание относительно строк UTF-16/32, хотя этот случай также может быть обработан путем добавления к строкам префикса с меткой порядка байтов. 19.05.2013
  • Это не имеет ничего общего с клиентом и сервером, только с отправкой и получением. 21.05.2013
  • @EJP это правда, но я объяснял в контексте исходного вопроса, где клиент является отправителем, а сервер - получателем. 21.05.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..