【问题标题】:PHP socket_bind(): unable to bind address [10013]PHP socket_bind(): 无法绑定地址 [10013]
【发布时间】: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]:所引用的对象类型不支持尝试的操作。

有什么问题?

【问题讨论】:

    标签: php sockets udp


    【解决方案1】:

    自己查一下,udp 7714端口被其他进程占用了。

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2012-05-30
      • 2019-09-23
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多