**socket相关函数:**
\----------------------------------------------------------------------------------------------
socket\_accept() 接受一个Socket连接
socket\_bind() 把socket绑定在一个IP地址和端口上
socket\_clear\_error() 清除socket的错误或者最后的错误代码
socket\_close() 关闭一个socket资源
socket\_connect() 开始一个socket连接
socket\_create\_listen() 在指定端口打开一个socket监听
socket\_create\_pair() 产生一对没有区别的socket到一个数组里
socket\_create() 产生一个socket,相当于产生一个socket的数据结构
socket\_get\_option() 获取socket选项
socket\_getpeername() 获取远程类似主机的ip地址
socket\_getsockname() 获取本地socket的ip地址
socket\_iovec\_add() 添加一个新的向量到一个分散/聚合的数组
socket\_iovec\_alloc() 这个函数创建一个能够发送接收读写的iovec数据结构
socket\_iovec\_delete() 删除一个已经分配的iovec
socket\_iovec\_fetch() 返回指定的iovec资源的数据
socket\_iovec\_free() 释放一个iovec资源
socket\_iovec\_set() 设置iovec的数据新值
socket\_last\_error() 获取当前socket的最后错误代码
socket\_listen() 监听由指定socket的所有连接
socket\_read() 读取指定长度的数据
socket\_readv() 读取从分散/聚合数组过来的数据
socket\_recv() 从socket里结束数据到缓存
socket\_recvfrom() 接受数据从指定的socket,如果没有指定则默认当前socket
socket\_recvmsg() 从iovec里接受消息
socket\_select() 多路选择
socket\_send() 这个函数发送数据到已连接的socket
socket\_sendmsg() 发送消息到socket
socket\_sendto() 发送消息到指定地址的socket
socket\_set\_block() 在socket里设置为块模式
socket\_set\_nonblock() socket里设置为非块模式
socket\_set\_option() 设置socket选项
socket\_shutdown() 这个函数允许你关闭读、写、或者指定的socket
socket\_strerror() 返回指定错误号的详细错误
socket\_write() 写数据到socket缓存
socket\_writev() 写数据到分散/聚合数组
案例:
服务端
<?php
//确保在连接客户端时不会超时
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
+-------------------------------
* @socket通信整个过程
+-------------------------------
* @socket_create
* @socket_bind
* @socket_listen
* @socket_accept
* @socket_read
* @socket_write
* @socket_close
+--------------------------------
*/
/*---------------- 以下操作都是手册上的 -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
break;
} else {
//发到客户端
$msg ="测试成功!\n";
socket_write($msgsock, $msg, strlen($msg));
echo "测试成功了啊\n";
$buf = socket_read($msgsock,8192);
$talkback = "收到的信息:$buf\n";
echo $talkback;
if(++$count >= 5){
break;
};
}
//echo $buf;
socket_close($msgsock);
} while (true);
socket_close($sock);
?>