1

ソケット (TCP と UDP の両方) からのバイナリ データの解析を含む erlang アプリケーションがあります。バイナリ データは特定のプロトコルに従っているため、TCP および UDP ソックスのオプションは次のとおりです。

TCP 靴下:
Opts = [バイナリ、{パケット、0}、{reuseaddr、真}、
            {キープアライブ、真}、{バックログ、30}、{アクティブ、偽}]、
UDP ソックス:
[バイナリ、{アクティブ、一度}、{recbuf、2097152}]

さて、ソケットから取得したデータを解析すると、次のようになります (UNIX の場合):

    << バージョン:4/big-unsigned-integer-unit:8,
       長さ:2/big-unsigned-integer:8,
       _Rest/binary >> = Bin_event_From_Socket.

さて、LINUX はリトル エンディアン ベースであるため、LINUX で実行すると問題が発生します。したがって、ここでのオプションは、上記のコードで「大きい」を「小さい」に変換することです。

しかし、Erlang は VM ベースの言語であるため、プラットフォームに依存しないコードを作成する機能が必要です。NET を検索しましたが、あまり見つかりませんでした。

では、ここでの質問は、プラットフォームに依存しないソケット データ解析コードをどのように記述できるかということです。

ありがとう。

4

2 に答える 2

3

bigorの代わりにlittleendianness を使用できますnative。これは、使用しているプラ​​ットフォームの正しいエンディアンにデフォルト設定されます。

于 2012-05-12T08:16:01.663 に答える
0

これは、Dmitry が erlang メーリング リストで得た回答です。

http://erlang.org/pipermail/erlang-questions/2012-May/066692.html

于 2012-05-12T09:57:30.903 に答える