endiannes (LI -> network -> BI и обратно)
Модератор: Модераторы разделов
endiannes
пишу программу, которая передает по сети поток байтов, сначала читаю из устройства tun0 в буфер, потом передаю в сеть этот буффер с помощью sendto(), на другом конце принимаю пакет с помощью recvfrom() и передаю в tun0 с помощью write(), соответственно вопрос: если на другом конце будет не LE машина, а BE, то данные будут испорчены? И соответственно мне нужно из буфера (на отправителе) копировать в еще один буфер в цикле с помощью htonl(), а на принимающем хосте читать из принятого пакета в цикле с помощью ntohl() а потом уже с помощью write отправлять этот буфер приложению приемнику?
Последний раз редактировалось ivanr 25.12.2020 16:09, всего редактировалось 1 раз.
Debian GNU/Linux 4.0
Re: indiannes
А не проще сделать простейшую обёртку над данными и передавать/принимать не поток байт, а поток пакетов? Заодно можно будет идентифицировать отправителя и понять, что это - не поток мусора, а поток полезных байт. Ну и, определиться с BE/LE.
Re: indiannes
С потоком байт ничего не случится: что послали, то и примется. Но если вы преобразуете в байты что-либо подлиннее, то вы уже можете и нарваться, и не только на порядке байт
P.S. Endianness. И происхождение этого термина интересное.
P.S. Endianness. И происхождение этого термина интересное.
Спасибо сказали:
Re: indiannes
да, я заметил уже ошибку, и в теме поправил, однако в ответах она не поправилась
Debian GNU/Linux 4.0