Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中找到套接字的本地端口?_Php_Sockets_Udp_Port - Fatal编程技术网

如何在PHP中找到套接字的本地端口?

如何在PHP中找到套接字的本地端口?,php,sockets,udp,port,Php,Sockets,Udp,Port,我正在使用以下命令创建UDP套接字: $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 当我使用socket_getsockname获取套接字名称时: /** * Get Source port (Refactored to allow unit testing) * * @return string */ private static function getSourcePort($sock

我正在使用以下命令创建UDP套接字:

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
当我使用socket_getsockname获取套接字名称时:

   /**
    * Get Source port (Refactored to allow unit testing)
    *
    * @return string
    */
    private static function getSourcePort($sock)
    {
        $addr = null;
        $port = null;
        socket_getsockname($sock, $addr, $port);
        return $port;
    }
返回的端口始终为0,地址为0.0.0.0


如何正确获取绑定端口?

创建后绑定套接字修复了以下问题:

if (socket_bind($sock, $sourceIp) === false)
{
    $failReason = "socket_bind() failed: reason: " . socket_strerror(socket_last_error());
}

// get the source port
$sourcePort = 0;
if (socket_getsockname($sock, $sourceIp, $sourcePort) === false)
{
    $failReason = "socket_getsockname() failed: reason: " . socket_strerror(socket_last_error());
}

此处可能重复返回的端口始终为0,地址为0.0.0.0是的,您正在创建套接字,但未连接它:socket\u connect$sock,$server\u ip\u Here,$port\u Here;之后,它应该返回正确的ip和端口。