這個想法是通過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