[#2023] Class Method の index — (Dezawa Shin-ichiro) <dezawa@...>

出沢です

13 messages 1997/02/02

[#2158] [Req] pack/unpack — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

14 messages 1997/02/18
[#2166] Re: [Req] pack/unpack — matz@... (Yukihiro Matsumoto) 1997/02/18

まつもと ゆきひろです.

[#2277] ruby 1.0-970228 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

16 messages 1997/02/28

[ruby-list:2158] [Req] pack/unpack

From: keiju@... (Keiju ISHITSUKA)
Date: 1997-02-18 06:43:26 UTC
List: ruby-list #2158
けいじゅ@SHLジャパンです. 

最近. pack/unpackを用いてプロトコルを設計しているのですが, そこで気づ
いたことを...

通信プロトコルなどでは不定長のデータはその繰り返しをプロトコルの中に入
れることがい多いと思います.

例えば,

  種別ID サイズ 文字列データ

のようなプロトコルをpack/unpackで場合,

writeは:

  sock.write([ID, data.size, data].pack("nna#{data.size}")

こんなかんじでまだ良いのですが.

readは:

  id, = sock.read(2).unpack("n")
  # たぶん, ここでプロトコル種別毎の処理分岐
  size, = sock.read(2).unpack("n")
  data, = sock.read(data).unpack("a#{size}")

とこんな雰囲気になり結構めんどくさいです.

でリクエストなのですが, 書き込みに関しては,

  sock.packwrite("nna$2", ID, data.size, data)

のようなメソッドと, フォーマットの拡張があると良いかと思います($2は2番
目のnで取り出した数値をおくという意味).

一般にプロトコルはその種別毎にフォーマットが決まっていて, そのサイズも
データを読み込む途中で確定します.

上記のような例ですと:

  # IDで識別した後
  data.size, data = sock.packread("na$1")

のようなメソッドがあれば非常に楽にプロトコルが作れるようになると思いま
す.

いかがでしょうか?
  
__
.........................................石塚 圭樹@SHLジャパン(株)...
------------>アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread

Prev Next