php - PHP/UDP : Can write via UDP,,但无法接收数据接缝

标签 php sockets udp

我有在本地Mac上的php上运行的这段代码:

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$result = socket_connect($socket, $address, $port);
$msg = "i";
$len = strlen($msg);
socket_send($socket, $msg, $len, 0);
socket_recv($socket, $buf, 512, 0);
echo $buf;
socket_close($socket);
该代码可以工作到“socket_recv”。实际上,当在计算机上运行udp测试应用程序时,我可以在该应用程序的终端屏幕上看到来自udp服务器的答案。但是,脚本本身永远都在运行(我假设它正在等待由于某种原因永远不会通过套接字的输入)。
我还尝试在synology NAS上的本地Web服务器上运行脚本。结果相同。
(与UDP App明显关闭的相同结果)

最佳答案

使用此代码解决了问题。显然,发送后必须关闭 socket ,然后打开一个新的 socket 以进行接收。它似乎是此设备(服务器)的唯一行为:

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$bytes = socket_sendto($socket, $message, strlen($message), 0, "192.168.0.37", 7090);
socket_close($socket);

$message="curr 7700";
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, '0.0.0.0', 7090);
$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 512, 0, $from, $port);
echo $buf . PHP_EOL;

关于php - PHP/UDP : Can write via UDP,,但无法接收数据接缝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64723429/

相关文章:

php - 如何根据现有时间戳使用 PHP/MySQL 创建统计工具?

php - 替换 XML 中的子项

node.js - 我应该如何处理 CONNECT 事件?

java - 套接字的 InputStream 不会因对等丢失而关闭

PHP SimpleXML - 多个同名的 child

php - 对网站进行单元测试

Java void sendUrgentData() 抛出 SocketException

c++ - UDP 服务器套接字缓冲区溢出

创建 pcap 文件

java - UDP 绑定(bind)失败