PHP socket_bind():无法绑定地址[10013]

时间:2017-11-27 17:10:21

标签: php sockets udp

我正在尝试与特定硬件进行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]:引用的对象类型不支持尝试的操作。

有什么不对?

1 个答案:

答案 0 :(得分:0)

了解自己,udp端口7714被其他进程使用。