PHP socket_listen() 不工作
Posted
技术标签:
【中文标题】PHP socket_listen() 不工作【英文标题】:PHP socket_listen() not working 【发布时间】:2016-06-21 21:48:00 【问题描述】:我正在尝试学习 php 中的 Socket 编程。我得到了一个教程。我遵循了教程中的精确代码,但我的代码返回了
无法侦听套接字 [22]:无效参数错误。
我认为这更多的是服务器错误,而不是代码本身的错误。我在 Ubuntu 中运行 XAMPP 服务器。
#!/opt/lampp/bin/php
<?php
// set some variables
$host = "127.0.0.1";
$port = 80;
// don’t timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('Could not create socketn');
// bind socket to port socket_connect($socket, '/var/run/mysqld/mysqld.sock')
$result = socket_connect($socket, $host, $port) or die('Could not bind to socketn');
// start listening for connections
$result = socket_listen($socket, 3) or die('Could not set up socket listenern');
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die('Could not accept incoming connectionn');
// read client input
//$input = socket_read($spawn, 1024) or die(“Could not read inputn”);
// clean up input string
$input = "red";//trim($input);
// reverse client input and send back
$output = strrev($input) . 'n';
socket_write($spawn, $output, strlen ($output)) or die('Could not write output n');
echo ($output);
// close sockets
socket_close($spawn);
socket_close($socket);
?>
【问题讨论】:
【参考方案1】:由于您尝试侦听端口,而不是进行传出连接,因此您的 socket_connect
应该改为 socket_bind
(您的评论已经表明)
$result = socket_bind($socket, $host, $port) or die('Could not bind to socketn')
另外,您应该知道,监听低于 1024 的端口需要您以 root 身份运行脚本(不建议您进行实验),因此您可能需要更改为高于 1024 的端口才能以 root 身份运行普通用户。
【讨论】:
脚本运行没有任何错误。你期望输出回显($output)吗?要打印?该脚本没有返回任何输出,就像在无限循环中一样。 @user2267386 脚本正在等待连接到您要求它监听的端口。例如,如果您使用telnet localhost 8080
(假设您使用端口 8080),您应该在 telnet 和输出到控制台中都看到输出“dern”(红色反转 +“n”)。然后脚本将退出。以上是关于PHP socket_listen() 不工作的主要内容,如果未能解决你的问题,请参考以下文章
360搜索引擎so自动收录php改写方案——适合phpcms等cms