首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

stream_socket_server

(PHP 5, PHP 7)

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

描述

代码语言:javascript
复制
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服务器套接字

代码语言:javascript
复制
<?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服务器套接字

代码语言:javascript
复制
<?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 →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com