这个想法是通过TCP套接字连接PHP网页和C程序,以便网页等待C程序的连接,并在连接建立后立即接收数据。 PHP套接字连接,并接收数据的代码如下:PHP重复从TCP套接字接收数据
PHP(socketRead.php):
$address = 'localhost';
$port = 5001;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo "Socket creation error";
}
else {
echo "Socket created <br/>";
}
if (($ret = socket_bind($sock, $address, $port)) < 0) {
echo "Host/port connection failed";
}
else {
echo "Host/port connection successful <br/>";
}
if (($ret = socket_listen($sock, 5)) < 0) {
echo "Socket error";
}
else {
echo "Waiting connection <br/>";
}
if (($msgsock = socket_accept($sock)) < 0) {
echo "Socket connection start error";
} else {
echo "Awaiting data <br/>";
}
//Connection established, reading data
if (false === ($buf = socket_read($msgsock, 1024))) {
echo "Read error";
} else {
echo "Data: ".$buf;
}
if (isset($sock)) {
socket_close($ret);
socket_close($sock);
}
echo "<br /> Socket closed";
要读取从插座数据动态我使用jquery请求。
使用Javascript(index.html的):
function update_content() {
var request = $.get("socket/socketRead.php");
request.success(function(result) {
document.write(result);
});
}
update_content();
伟大的工作,直到我试图添加的时间间隔重复读取数据。
使用Javascript(index.html的):
var timer = setInterval(function(){update_content();}, 1000);
第一连接/接收仍是工作,但后来我在尝试重新连接时,在C程序中“连接被拒绝”。你能帮我解决这个问题吗?
*在C程序*“拒绝连接” - 如你所说,这不是一个问题,PHP PHP :-) socket函数和C使用相同的系统调用,我建议使用'socket_select()'在PHP和C中,也尝试设置套接字'nonblocking' – DanFromGermany
您的PHP脚本运行一次并终止,它不会在Javascript计时器过去之前再次启动,并且如果客户端消失,可能不会再次启动。真的,你有这个错误的方式,C程序(持久实体)应该监听连接,PHP(临时实体)应该连接到它。这样做是要求所有的麻烦,并不会成为任何生产的可行解决方案。 – DaveRandom
DaveRandom哈哈我甚至没有注意到.. @PaulPonomarev使用['fsockopen();'](http://php.net/fsockopen)为PHP连接到C程序 – DanFromGermany