gpt4 book ai didi

PHP如何连接套接字并读取响应?

转载 作者:行者123 更新时间:2023-12-03 11:51:13 25 4
gpt4 key购买 nike

标题说明了一切...

如何使用 tcp 协议(protocol)连接到 IP 并读取/获取响应?我搜索了很多,但没有找到任何解决方案。

$socket = stream_socket_server("tcp://127.0.0.1:22", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
echo fread($conn, 26);
fclose($conn);
}
fclose($socket);
}

这段代码可以吗?工作有吗?因为它似乎没有完成这项工作...

提前致谢

最佳答案

按照其他人的建议;避免使用端口 22。我建议使用一个模糊的(未使用的)套接字端口号 > 1024,例如 4444。任何低于 1024 的端口通常都需要 root 访问权限。如果您需要测试 22 的连接,请让您的服务器脚本运行其他功能。

至于将响应发送回连接的客户端,请使用 stream_socket_recvfrom($socket, $length, 0, $peer) 而不是 fread()

然后在客户端添加响应监听器:

client.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);

server.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'

关于PHP如何连接套接字并读取响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18477639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com