2012-05-12 10 views
1

私は、ソケット(TCPとUDPの両方)からのバイナリデータの解析を含むerlangアプリケーションを持っています。 今プラットフォームに依存しないソケットベースのバイナリ解析コード

 
TCP sock : 
Opts = [binary, {packet, 0}, {reuseaddr, true}, 
      {keepalive, true}, {backlog, 30}, {active, false}], 
 
UDP sock : 
[binary,{active,once},{recbuf,2097152}] 

、私はソケットから取得するデータを解析する際に、私は次のように行います:TCPとUDPの靴下のための私のオプションは以下のとおりであるので、バイナリデータは、いくつかの特定のプロトコルごとのようです(UNIXの場合):

 

    << Version:4/big-unsigned-integer-unit:8, 
     Length:2/big-unsigned-integer:8, 
     _Rest/binary >> = Bin_event_From_Socket. 

これは、LINUXがリトルエンディアンベースであるため、LINUXで実行すると問題になります。だから、私のここでのオプションは、上記のコードで 'big'を 'little'に変換することです。

しかし、ErlangはVMベースの言語であり、私はプラットフォームに依存しないコードを書くためのいくつかの機能を備えているに違いありません。私はNEtを検索しましたが、それについてはほとんど見つけられませんでした。

ここで問題となるのは、プラットフォームに依存しないソケットデータ解析コードを書く方法です。

ありがとうございました。

答えて

3

bigまたはlittleの代わりに、エンディアンno nativeを使用できます。これは、現在使用しているプラ​​ットフォームの正しいエンディアンになります。

+1

おかげアダム。しかし、私がペーストしたリンクのドミトリーによる答えは、より説得力があります。 – Arunmu

+0

ああ、私はあなたの質問を誤解しました。あなた自身の答えを受け入れてください。 :-) –

+0

ああ...私はしません。 :) – Arunmu

関連する問題