根据其他人的建议;避免使用端口 22。我建议使用不明显(未使用)的套接字端口号 > 1024,例如 4444。低于 1024 的任何内容通常都需要 root 访问权限。如果您需要测试 22 的连接性,请让您的服务器脚本运行其他功能。
至于将响应发送回连接的客户端,请使用stream_socket_recvfrom($socket, $length, 0, $peer)
而不是fread()
然后在客户端添加一个响应监听器:
客户端.php
$socket = stream_socket_client('tcp://127.0.0.1:4444');
if ($socket) {
$sent = stream_socket_sendto($socket, 'message');
if ($sent > 0) {
$server_response = fread($socket, 4096);
echo $server_response;
}
} else {
echo 'Unable to connect to server';
}
stream_socket_shutdown($socket, STREAM_SHUT_RDWR);
服务器.php
$conn = stream_socket_server('tcp://127.0.0.1:4444');
while ($socket = stream_socket_accept($conn)) {
$pkt = stream_socket_recvfrom($socket, 1500, 0, $peer);
if (false === empty($pkt)) {
stream_socket_sendto($socket, 'Received pkt ' . $pkt, 0, $peer);
}
fclose($socket);
usleep(10000); //100ms delay
}
stream_socket_shutdown($conn, \STREAM_SHUT_RDWR);
运行 server.php 它将在无限循环中侦听一个非空数据包,一旦 server.php 接收到一个数据包,它将用接收到的数据包响应连接的客户端。
然后执行 client.php,它将向 server.php 发送“消息”一旦发送,它将检索并回显来自 server.php 的响应,该响应应为'Received pkt message'