programın kendi emülatörü üzerinden kod gönderdim. Bu kod başarılı bir sonuç veriyor.
bu kodu php ile göndermem gerekiyor.
Gönderdigim kod:
³UU³³1³1³³P³26/02/2014³09:00³28/02/2014³12:30³³³0³0³0³0³0³7³³³³³³³³³³
Bu yeterli bir bilgi. Sorun, daha önceki mesajımda da belirttiğim gibi
SimpleByteArray sınıfını yazarken
unicode desteğini sunmamamış olmam. Ayrıca belirttiğim diğer bir husus da söz konusu;
string türünün sunucuda
null bir
byte ile sonlandırılmaması. Bu hususları düzeltmek için,
write_string metodunun altına aşağıdaki metodu ekleyin;
/**
* @param string $val
* @param bool $null_terminator
*/
public function write_mb_string($val, $null_terminator = true)
{
$val = $val ? $val : '';
$string_array = preg_split('//u', $val, -1, PREG_SPLIT_NO_EMPTY);
foreach($string_array as $letter)
{
list(, $code) = unpack('N', mb_convert_encoding($letter, 'UCS-4BE', 'UTF-8'));
$this->write_byte($code);
}
if($null_terminator)
$this->write_byte(0x00);
}Paketi göndermek istediğiniz noktadaki kodlarınızı da şu şekilde değiştirin;
<?
define('STX', 0x02);
define('ETX', 0x03);
define('LRC', 0x0D);
$host = '127.0.0.1';
$port = 1234;
$socket = fsockopen($host, $port);
$packet = new SimpleByteArray();
$packet->write_byte(STX); // STX
$packet->write_mb_string('³UU³³1³1³³P³26/02/2014³09:32³28/02/2014³09:32³³³0³0³0³0³0³7³³³³³³³³³³', false); // Message
$packet->write_byte(ETX); // ETX
$packet->write_byte(LRC); //LRC
@socket_write($socket, $packet, strlen($packet));
@fflush($socket);
@fclose($socket);
?>
<h3>Paket Dokumu:</h3>
<pre>
<?
$bytes = $packet->bytes();
for($i = 0; $i < count($bytes); $i++)
{
$hex_val = str_pad(strtoupper(dechex($bytes[$i])), 2, 0, STR_PAD_LEFT);
echo "{$hex_val} ";
if(!$i) continue;
if(($i + 1) % 16 == 0) echo PHP_EOL;
}
?>
</pre>Alacağınız sonuç aşağıdaki gibi olmalı;
Paket Dokumu:
02 B3 55 55 B3 B3 31 B3 31 B3 B3 50 B3 32 36 2F
30 32 2F 32 30 31 34 B3 30 39 3A 33 32 B3 32 38
2F 30 32 2F 32 30 31 34 B3 30 39 3A 33 32 B3 B3
B3 30 B3 30 B3 30 B3 30 B3 30 B3 37 B3 B3 B3 B3
B3 B3 B3 B3 B3 B3 03 0D