You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP socket_sendto发送UDP数据包丢失问题排查求助

UDP数据包发送异常排查问题

我有一套PHP CMS系统,用于向本地网络中的设备发送UDP数据包以关闭设备,代码如下:

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (!$sock) {
    echo "COULD NOT CREATE SOCKET";
}
$result = socket_sendto($sock, "Ausgang1AUS", 11, 0, "192.168.20.49", 30303);
socket_close($sock);
if ($result) echo "UDP SENT ".$result." BYTES";

该代码在旧的物理Linux服务器上运行完全正常,但切换到新的虚拟Linux服务器后,数据包始终无法到达目标设备。PHP无报错,仅输出“UDP SENT 11 BYTES”,但数据包未出现在本地网络中。

以下场景下该操作能正常运行:

  • 将UDP数据包发送到服务器自身IP;
  • 在本地网络中的其他机器上运行该脚本;
  • 通过netcat发送UDP,例如:echo "Ausgang1AUS" | nc -u 192.168.20.49 30303。

服务器已禁用防火墙和SELinux,排除了通用阻塞问题。请问可能是什么原因导致的?是PHP设置或用户权限问题吗?有什么工具可以追踪UDP数据包的去向?


编辑补充:最终发现问题与PHP的socket_sendto无关,而是和发送的数据长度有关。使用echo命令会自动添加换行符,导致数据长度从11字节变成12字节,此时数据包就能正常送达。我已在SuperUser发布了新问题。


内容的提问来源于stack exchange,提问作者fseydel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:39:17