0

TCPSocket.read(no_of_bytes)を使用する代わりに、単にTCPSocket.read_allを使用できるように、read_allのように動作できるメソッドはありますか。最初にYAML::dumpでオブジェクトを送信してから送信していますが、サイズをバイト単位で取得する方法がわかりません。よろしくお願いします。ああ、私はあらゆる形式のネットワークプログラミングに非常に慣れていないので、気楽にやってください!

4

2 に答える 2

2

Rubyの場合は役に立ちませんが、オブジェクトのシリアル化とネットワークの通常の方法は、最初に長さを送信して読み取る量を把握するか、事前定義された区切り文字を使用してメッセージを区切ることです。

于 2010-05-10T19:03:56.710 に答える
1

そのような機能があるのではないかと思います。でも!それを書くことは本当に最も簡単な部分です。ルビーコードを書いてから久しぶりなので、この言語に依存しないようにする必要がありますが、擬似コードでは基本的には次のようになります。

def read_all(s)
   buffer = ""

   while (tmp = s.recv(128))
      if tmp == end_of_file
         break
      end

      buffer = buffer + tmp
   end

   return buffer
 end

終わり。使用可能なデータがなくなるまでループして受信します。これは最も簡単なタスクの1つです:)

于 2010-05-10T19:04:27.980 に答える