1

私はソケット経由で何かを送信しようとしているので、次のような単純なプロトコルを作成しました:

[メッセージ長(uint32)][パケットID(uint32)][メッセージ]

では、このプロトコルでメッセージを送信するにはどうすればよいでしょうか? 私はこれを試しました:

message = 'hi'
parent_socket.send([message.length, 2].pack('LL') + message, 0)

そしてそれはうまくいかないようです。私が得るのは、長さとパケットIDだけです。どうすればこれを理解できますか?

(更新)メッセージを受信するために使用しているコードは次のとおりです。

if child_socket.ready?
  header = child_socket.read(8).unpack('LL')
  length = header[0]
  packet = header[1]
  case packet
    when 1
      stdin.write(child_socket.read(length))
    when 2
      puts child_socket.read(length)
      #send console
    else
      Console.show "Unknown packet : #{packet}"
end

出力は 10 です。正常に見えます (4 + 4 + 2)

その場合、長さは 2 で、パケットは 2 です。したがって、「when 2」に切り替えますが、何も出力しません。

4

1 に答える 1

1

問題は、最初の 8 バイトしか読み取っていないことです。

header = child_socket.read(8).unpack('LL')

IO#readのドキュメントによると、長さを渡さないと、すべてを取得する必要がある EOF まで読み取られます。したがって、その長さパラメーターを削除するだけです。

header = child_socket.read.unpack('LL')
于 2013-08-20T10:00:35.563 に答える