<?php
function go(){
$starttime = round(microtime(true),2);
echo "GO() ... <br />\r\n";
echo "socket_create ...";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket < 0){
echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
exit();
} else {
echo "OK <br />\r\n";
}
echo "socket_bind ...";
$bind = socket_bind($socket, '127.0.0.1', 889);//привязываем его к указанным ip и порту
if($bind < 0){
echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
exit();
}else{
echo "OK <br />\r\n";
}
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);//разрешаем использовать один порт для нескольких соединений
echo "Listening socket... ";
$listen = socket_listen($socket, 5);//слушаем сокет
if($listen < 0){
echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
exit();
}else{
echo "OK <br />\r\n";
}
while(true){ //Бесконечный цикл ожидания подключений
echo "Waiting... ";
$accept = @socket_accept($socket); //Зависаем пока не получим ответа
if($accept === false){
echo "Error: ".socket_strerror(socket_last_error())."<br />\r\n";
usleep(100);
} else {
echo "OK <br />\r\n";
echo "Client \"".$accept."\" has connected<br />\r\n";
file_put_contents("res.txt", "OK ");
}
$msg = "Hello, Client!";
echo "Send to client \"".$msg."\"... ";
socket_write($accept, $msg);
echo "OK <br />\r\n";
if( ( round(microtime(true),2) - $starttime) > 100) {
echo "time = ".(round(microtime(true),2) - $starttime);
echo "return <br />\r\n";
return $socket;
}
}
}
error_reporting(E_ALL); //Выводим все ошибки и предупреждения
set_time_limit(0); //Время выполнения скрипта не ограничено
ob_implicit_flush(); //Включаем вывод без буферизации
$socket = go(); //Функция с бесконечным циклом, возвращает $socket по запросу выполненному по прошествии 100 секнуд.
echo "go() ended<br />\r\n";
if (isset($socket)){
echo "Closing connection... ";
@socket_shutdown($socket);
socket_close($socket);
echo "OK <br />\r\n";
}
?>当打开带有此代码的页面时,它将开始无限加载。
端口889/tcp打开
机器拥有来自remi存储库的php 7.2,这些插件包括: php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl-devel php-mcrypt php -pear。
出现这种问题的原因是什么?连接的时候什么都不会发生。
发布于 2018-02-06 03:35:55
问题是浏览器不能运行套接字(实际上可以这样做,但看不到程序返回的内容),所以必须通过控制台(例如: php filename.php)运行php套接字。在socket_bind功能中应使用全局ip(Global )。
https://stackoverflow.com/questions/48619137
复制相似问题