# socket_create_listen
* * * * *
说明:
> 在指定的端口上打开类型为AF_INET的资源流套接字,用于接受连接
语法:
~~~
resource socket_create_listen ( int $port [, int $backlog = 128 ] )
~~~
参数:
| 参数 | 描述 |
| --- | --- |
| port | 需要在哪个端口创建,没有指定端口号,或者为0,则随机选择一个端口号,端口号必须为1 - 65535的有效端口号|
| backlog | 设置该socket可接受连接的最大数|
返回值:
| 成功 | 失败 |
| --- | --- |
| 返回一个socket套接字资源 (resource数据类型) | false |
返回失败,错误代码会传入 socket_last_error() ,如果将此参数传入 socket_strerror() 则可以得到错误的文字说明。
技术细节:
PHP版本:PHP 4 >= 4.1.0, PHP 5, PHP 7
实例:
服务端代码 server.php
~~~
// 在5520端口上打开资源流套接字,用于接受连接
$sock = socket_create_listen(5520);
//根据$sock 获取 主机地址 和 端口
socket_getsockname($sock, $addr, $port);
print "Server Listening on $addr:$port\n";
//循环 判断是否有连接
while ($new_socket = socket_accept($sock)) {
// 获取客户端连接的 地址 和 端口
socket_getpeername($new_socket, $raddr, $rport);
print "Received Connection from $raddr:$rport\n";
}
//工作完毕,关闭套接流
socket_close($sock);
~~~
客户端代码 client.php
~~~
//创建一个socket套接流
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//连接上面服务端的套接流
socket_connect($socket, '127.0.0.1', 5520);
//工作完毕,关闭套接流
socket_close($socket);
~~~
打开windows的cmd窗口,然后,运行php server.php
再打开另外一个cmd窗口 ,然后,运行php client.php
服务端信息:
![](https://box.kancloud.cn/a6ddaaeb934080efafc3ba6413710973_354x59.png)
注:
1、windows中需要把 php这个运行命名 加入环境变量中
2、需要在php.ini 开启extension=sockets 模块
资料来源:
http://php.net/manual/zh/function.socket-create-listen.php
backlog参数详解:https://www.jianshu.com/p/e6f2036621f4