我有一台TCP服务器与IOT设备连接,该设备通过XML格式向服务器发送数据。我编写了PHP服务器代码并从客户端IOT读取输入数据并将它们存储在日志中。
问题:
IOT XML输入带有许多由“/ n”分隔的xml数据。现在的问题是,当我读取套接字输入时,它没有采用所有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>
我的代码出了什么问题?我无法获得所有物联网日志。