【发布时间】:2018-05-11 00:15:42
【问题描述】:
我正在尝试与特定硬件建立 udp 套接字连接,该硬件在端口 7715 接收数据,将响应发送到 udp 端口 7714,端口无法更改。下面一段代码:
<?php
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if (!socket_bind($socket, '192.168.1.254', 7714)){
echo socket_strerror(socket_last_error($socket));
}
socket_connect($socket, '192.168.1.150', 7715);
if (!socket_listen($socket, 5)){
echo socket_strerror(socket_last_error($socket));
}
$arr = [0x23, 0x00, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06];
$checksum = 0x00 - array_sum($arr);
$str = implode(', ', $arr);
$eval = '$buffer = ' . "pack('c*', $str, $checksum);";
eval($eval);
socket_write($socket, $buffer);
防火墙已禁用,Wireshark 显示一切正常:
1 0.000000 192.168.1.254 192.168.1.150 UDP 54 65213 → 7715 Len=12
2 0.005611 192.168.1.150 192.168.1.254 UDP 78 7715 → 7714 Len=36
不知何故,PHP 可以将此套接字绑定到任何 udp 端口,但不能绑定到 7714。
警告:socket_bind():无法绑定地址 [10013]:试图以访问权限禁止的方式访问套接字。
警告:socket_listen():无法侦听套接字 [10045]:所引用的对象类型不支持尝试的操作。
有什么问题?
【问题讨论】: