2010-01-25 5 views
2

저는 Erlang에 매우 익숙하며, 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)); 
} 

: 여기에 PHP의 기능입니다

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 >>, 아니요? 또한

, 내가 할 노력하고있어의 사양 : http://developer.valvesoftware.com/wiki/Source_RCON_Protocol

HALP!

감사합니다.

+0

시도가 잘못 되었나요? – Zed

답변

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). 

누군가를 돕는 희망!