Erlang二进制包
问题描述:
我对Erlang非常陌生,我正在转换一些PHP的东西,我无法弄清楚这一点。这里是PHP函数:Erlang二进制包
public function raw_send($string1, $string2 = NULL, $type = SERVERDATA_EXECCOMMAND) {
$data = pack('VV', $this->get_request_id(), $type) . $string1 . chr(0) . $string2 . chr(0); // build data
$packet = pack('V', strlen($data)) . $data;
fwrite($this->fp, $packet, strlen($packet));
}
这是我的尝试:
raw_send(Sock, String1, String2, Type) ->
RequestId = random:uniform(10),
PacketData = list_to_binary([<<RequestId, Type>>, String1, 0, String2, 0]),
DataLength = byte_size(PacketData),
Packet = list_to_binary([<<DataLength>>, PacketData]),
ok = gen_tcp:send(Sock, Packet).
我使用CRC32比较的东西试过,包( “VV”,1,3)在PHP应该= < < 1/unsigned-little,3/unsigned-little >>,no?
而且,我想要做的规格:http://developer.valvesoftware.com/wiki/Source_RCON_Protocol
HALP!
谢谢
答
明白了,没有使用32位整数! (感谢ndim @ freenode)
raw_send(Sock, String1, String2, Type) ->
RequestId = random:uniform(10),
String1Bin = list_to_binary(String1),
String2Bin = list_to_binary(String2),
PacketData = <<RequestId:32/little, Type:32/little, String1Bin/binary, 0, String2Bin/binary, 0>>,
DataLength = byte_size(PacketData),
Packet = <<DataLength:32/little, PacketData/binary>>,
ok = gen_tcp:send(Sock, Packet).
希望能帮助别人!
你的尝试有什么问题? – Zed 2010-01-25 11:22:39