【问题标题】:Erlang Binary PacketErlang 二进制包
【发布时间】:2010-01-25 19:53:13
【问题描述】:

我是 Erlang 的新手,我正在转换我的一些 PHP 内容,但我无法弄清楚这一点。这是PHP中的函数:

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 比较东西,php 中的 pack("VV", 1, 3) 应该 = >,不是吗?

另外,我正在尝试做的规范:http://developer.valvesoftware.com/wiki/Source_RCON_Protocol

停下来!

谢谢

【问题讨论】:

  • 你的尝试有什么问题?

标签: php erlang binary packet


【解决方案1】:

知道了,没有使用 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).

希望对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 2015-06-01
    • 2012-06-25
    • 1970-01-01
    • 2021-12-26
    • 2014-08-27
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多