socket_read ($ spawn, 2480) не читает полный ввод после / n или / r

У меня есть TCP-сервер для подключения к устройству IOT, которое отправляет данные на сервер в формате XML. Я написал код сервера PHP и прочитал входные данные из клиентского IOT и сохранил их в журнале.

Проблема:

Ввод IOT XML содержит множество данных xml, разделенных символом «/ n». Теперь проблема в том, что когда я читаю входные данные сокета, он не принимает все входные данные IOT XML. Прекращает чтение после после получения «/ n».

Что мне нужно сделать, чтобы прочитать все входящие данные на сервере сокетов, включая «/ n» и все?

Вот мой код сервера сокетов:

     <?php
// set some variables
$host = "XXXXXXXXXXX";
$port = 5008;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input

while ($input = socket_read($spawn, 15360, PHP_BINARY_READ) or die("Could not read input\n")) {
$file = date("Ymd")."_uid.txt";
// clean up input string
$input = trim($input);
// $xml = simplexml_load_string($input);
// $json = json_encode($xml);
file_put_contents($file, $input, FILE_APPEND | LOCK_EX);

echo "[" . $input . "]";
// reverse client input and send back
$output = strrev($input);
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");

if ($input != "") {
break;
}
}

// close sockets
socket_close($spawn);
socket_close($socket);

?>

И входной формат XML

<?xml version="1.0"?><Message><TerminalType>M50</TerminalType> <DeviceUID>037f6c</DeviceUID> <TerminalID>1</TerminalID> <DeviceSerialNo>69201707250004</DeviceSerialNo> <TransID>0</TransID> <Event>TimeLog</Event> <Year>2017</Year> <Month>11</Month> <Day>22</Day> <Hour>9</Hour> <Minute>54</Minute> <Second>44</Second> <UserID>4</UserID> <AttendStat>Duty On</AttendStat> <VerifMode>FP</VerifMode> <JobCode>0</JobCode> <APStat>None</APStat> <Photo>No</Photo> </Message>

Что не так с моим кодом? Я не могу получить весь журнал IOT.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]