tcp ip客户端-服务器连接以接收php中的XML数据

tcp ip客户端-服务器连接以接收php中的XML数据,php,xml,sockets,tcp,Php,Xml,Sockets,Tcp,嗨,伙计们,你好吗。 我有一个向网络发送XML数据的网络设备,因此我目前正在开发一个监控应用程序,该应用程序将永久连接到此设备以接收XML数据,只要该设备在连接时继续向网络发送数据 我使用了php套接字编程,我的应用程序连接到服务器,虽然它不断发送xml数据,但以倍数的形式发送,我尝试找到一种方法,在xml数据循环通过时发送,并且只有在设备发送另一个数据但不以这种方式工作时才重新发送。代码如下: <?php //timeout limit set_time_limit(0); //C

嗨,伙计们,你好吗。 我有一个向网络发送XML数据的网络设备,因此我目前正在开发一个监控应用程序,该应用程序将永久连接到此设备以接收XML数据,只要该设备在连接时继续向网络发送数据

我使用了php套接字编程,我的应用程序连接到服务器,虽然它不断发送xml数据,但以倍数的形式发送,我尝试找到一种方法,在xml数据循环通过时发送,并且只有在设备发送另一个数据但不以这种方式工作时才重新发送。代码如下:

  <?php
//timeout limit
set_time_limit(0);

//Creating Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error($socket)) . "<br />";
} else {
    echo "OK.<br />";
}

echo "Attempting to connect to the socket'...";
$result = socket_connect($socket, '192.168.43.50', 10001);
if ($result === false) {
    echo "socket_connect() failed.<br />Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "<br />";
} else {
    echo "OK.<br />";
}
$in = "GET / HTTP/1.1\r<br />";
$in .= "Host: 192.168.43.50\r\n<br />";
$in .= "Content-Type: application/xml; encoding=UTF-8\r\n";
$in .= "Accept: application/xml\n";
$in .= "Connection: Close\r<br />\r<br />";
$out= '';

echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.<br />";

echo "Reading response:<br /><br />";

while ($out = socket_read($socket, PHP_BINARY_READ g)) {
    //$result= simplexml_load_string($out) or die ("Error: Cannot create object");
//print_r ($result);
    echo htmlspecialchars ($out)."\r\n /<br /><br />";


echo "Closing socket...";
socket_close($socket);
echo "OK.<br /><br />";

?>


当PHP已经启动时,真的没有理由编写自己的HTTP客户端库。如果你需要一个持久连接,试着利用一个现有的协议,比如它有多种语言的实现,包括PHP。当PHP已经存在时,没有理由编写你自己的HTTP客户端库。如果您需要一个持久连接,请尝试利用现有的协议,比如它有多种语言的实现,包括PHP。
<?php
 $fp = fsockopen("192.168.43.50", 10001, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)";
} else {
    $wait = true;    
    $out = '<?xml version="1.0" encoding="UTF-8"?>';

    // [1] disable blocking
    stream_set_blocking($fp, 0);
    fwrite($fp, $out);

    while (!feof($fp)) {
        $r = fgets($fp);
        echo htmlspecialchars ($r);
        if (!strcmp($r, "")){                
            if (!$wait) {
                // [2] has recieved data on this socket before
                break;
            }
        } else {
            $wait = false;
        }
    }
    fclose($fp);
}
?>