我正在尝试通过套接字发送内容,所以我制作了一个简单的协议:
[消息长度(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.因此,它切换到“2时”,但不输出任何内容。
答案 0 :(得分:1)
问题是你只是阅读前8个字节。
header = child_socket.read(8).unpack('LL')
根据IO#read的文档,如果你没有传递一个长度,它会读到EOF,它应该可以得到所有东西。所以只需删除该长度参数:
header = child_socket.read.unpack('LL')