我正在使用 Ubuntu 12.04。
我有一个服务可以不断地向 127.255.255.255 发送数据(二进制图像),以便允许每个未来的本地服务在需要时获取该数据。
是否可以通过 php 获取 UDP 数据流量,以便在用户连接到安装在 pc 上的 Web 服务器时向用户显示?
我已经尝试在 php 中创建一个套接字并获取数据(简单的数据只是为了证明通信),如果我通过命令行运行 php 代码,它可以工作,但是如果我通过浏览器访问网页,我什么也看不到,我可以看到持续加载数据直到它停止并显示数据的网页。这意味着 php 页面可以获取数据,但只有在应用程序停止时才会显示它。
我希望当我访问该网页时,我可以看到数据流,并且只有当我更改网页时应用程序才会停止。
该应用程序似乎运行 30 秒并记住所有输出,然后将输出写入屏幕。我没有设置 30 秒,应用程序应该永远运行,因为它进入了 while(true) 循环。
这是代码:
<body style="background-color: yellow;">
<div style="margin: auto; margin-top: 50px;">
<div style="margin: auto; width: 200px; font-weight: bold; font-size: 20px; margin-bottom: 20px; color: darkgreen;">Real Time View</div>
<?php
//Create a UDP socket
if(!($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
//echo "Socket created <br>";
if( !socket_set_nonblock($socket) ){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not nonblock socket : [$errorcode] $errormsg \n");
}
// Bind the source address
if( !socket_bind($socket, "0.0.0.0" , 9999) ){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
//echo "Socket bind OK <br>";
while(1){
//echo "Waiting for data ... <br>";
//Receive some data
//$r = socket_recvfrom($socket, $buf, 512, 0, $remote_ip, $remote_port);
//echo "$remote_ip : $remote_port -- " . $buf ."<br>";
$r = socket_read($socket, 1024);
echo $r;
//Send back the data to the client
//socket_sendto($socket, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);
}
socket_close($socket);
?>
</div>
</body>
任何想法?