endiannes (LI -> network -> BI и обратно)

Модератор: Модераторы разделов

Аватара пользователя
ivanr
Сообщения: 166
Статус: эblan
ОС: Debian 4.0

endiannes

Сообщение ivanr »

пишу программу, которая передает по сети поток байтов, сначала читаю из устройства tun0 в буфер, потом передаю в сеть этот буффер с помощью sendto(), на другом конце принимаю пакет с помощью recvfrom() и передаю в tun0 с помощью write(), соответственно вопрос: если на другом конце будет не LE машина, а BE, то данные будут испорчены? И соответственно мне нужно из буфера (на отправителе) копировать в еще один буфер в цикле с помощью htonl(), а на принимающем хосте читать из принятого пакета в цикле с помощью ntohl() а потом уже с помощью write отправлять этот буфер приложению приемнику?
Последний раз редактировалось ivanr 25.12.2020 16:09, всего редактировалось 1 раз.
Debian GNU/Linux 4.0
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3000
ОС: Mandriva => Gentoo (~amd64)

Re: indiannes

Сообщение devilr »

А не проще сделать простейшую обёртку над данными и передавать/принимать не поток байт, а поток пакетов? Заодно можно будет идентифицировать отправителя и понять, что это - не поток мусора, а поток полезных байт. Ну и, определиться с BE/LE.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
ivanr
Сообщения: 166
Статус: эblan
ОС: Debian 4.0

Re: indiannes

Сообщение ivanr »

да, наверно проще, спасибо.
Debian GNU/Linux 4.0
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 1134
ОС: Fedora

Re: indiannes

Сообщение s.xbatob »

С потоком байт ничего не случится: что послали, то и примется. Но если вы преобразуете в байты что-либо подлиннее, то вы уже можете и нарваться, и не только на порядке байт
P.S. Endianness. И происхождение этого термина интересное. ;)
Спасибо сказали:

Аватара пользователя
ivanr
Сообщения: 166
Статус: эblan
ОС: Debian 4.0

Re: indiannes

Сообщение ivanr »

s.xbatob писал:
25.12.2020 16:16
P.S. Endianness. И происхождение этого термина интересное. ;)
да, я заметил уже ошибку, и в теме поправил, однако в ответах она не поправилась
Debian GNU/Linux 4.0
Спасибо сказали: