PHP
流 | Streams

stream_socket_server

stream_socket_server

(PHP 5, PHP 7)

stream_socket_server - 创建一个Internet或Unix域服务器套接字

描述

resource stream_socket_server ( string $local_socket [, int &$errno [, string &$errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context ]]]] )

在指定的位置创建一个流或数据报套接字local_socket

这个函数只创建一个套接字,开始接受使用stream_socket_accept()的连接。

参数

local_socket

创建的套接字类型由使用标准URL格式指定的传输确定:transport://target

对于AF_INET诸如TCP和UDP的Internet域套接字(),参数的目标部分remote_socket应由主机名或IP地址,后跟冒号和端口号组成。对于Unix域套接字,目标部分应指向文件系统上的套接字文件。

根据环境的不同,Unix域套接字可能不可用。可以使用stream_get_transports()检索可用传输列表。有关bulitin传输列表,请参阅支持的套接字传输列表。

errno

如果可选errnoerrstr参数时,它们将被设置为表明发生在系统级的实际系统级错误socket() bind()的,和listen()调用。如果返回的errno值为0并且函数返回FALSE,则表明错误发生在bind()调用之前。这很可能是由于初始化套接字时出现问题。需要注意的是,errnoerrstr参数将始终通过引用传递。

errstr

请参阅errno说明。

flags

位掩码字段可以设置为套接字创建标志的任意组合。

注意:对于UDP套接字,您必须将其STREAM_SERVER_BIND用作flags参数。

context

返回值

返回创建的流,或者出错返回FALSE

示例

示例#1使用TCP服务器套接字

<?php $socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr if (!$socket) {   echo "$errstr ($errno)<br />\n"; } else {   while ($conn = stream_socket_accept($socket)) {     fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n"     fclose($conn   }   fclose($socket } ?>

下面的示例显示了如何充当可以响应时间查询的时间服务器,如stream_socket_client()中的示例所示。

注意:大多数系统需要root访问才能在1024以下的端口上创建服务器套接字。

示例#2使用UDP服务器套接字

<?php $socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND if (!$socket) {     die("$errstr ($errno)" } do {     $pkt = stream_socket_recvfrom($socket, 1, 0, $peer     echo "$peer\n";     stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer } while ($pkt !== false ?>

注意

注意:当指定数字IPv6地址(例如fe80::1)时,必须将IP封装在方括号中 - 例如tcp://fe80::1:80

另请参阅

  • stream_socket_client() - 打开Internet或Unix域套接字连接

  • stream_set_blocking() - 在流上设置阻塞/非阻塞模式

  • stream_set_timeout() - 设置流上的超时时间

  • fgets() - 从文件指针获取行

  • fgetss() - 从文件指针获取行并去除HTML标签

  • fwrite() - 二进制安全文件写入

  • fclose() - 关闭打开的文件指针

  • feof() - 测试文件结尾的文件指针

← stream_socket_sendto

stream_socket_shutdown →