1、前言
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
这种介绍度娘很多,希望了解更多的自行百度,往下看的朋友记得先开启socket扩展;
2、创建socke服务器端
基本步骤:
- 初始化86socket
- 端口绑定
- 端口进行监听
- 调用accept阻塞
- 等待客服端连接
3、服务器端代码实现
<?php echo "****************server*****************\r\n"; //设置 IP 和 端口(端口必须保证不被占用,且允许被外部访问) $ip = "127.0.0.1"; $port = 1935; //超时设计 set_time_limit(0); //创建socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("创建socket失败,原因为:{socket_strerror($socket)}\r\n"); //绑定socket到指定ip和端口 $ret = socket_bind($socket, $ip, $port) or die("绑定socket失败,原因为:{socket_strerror($ret)}\r\n"); //监听socket,最大等会数为4 $ret = socket_listen($socket, 4) or die("监听socket失败,原因为:{socket_strerror($ret)}\r\n"); //计数 $count = 0; echo "等待连接!!!\r\n"; do { //收到请求连接 //调用子socket处理信息 $msgsock = socket_accept($socket); if(!$msgsock){ echo "socket阻塞失败,原因为:{socket_strerror($msgsock)}\r\n"; } $msg = "<p style='color:red'>连接成功</p>"; //处理客服端输入并返回数据 socket_write($msgsock, $msg, strlen($msg)); $buf = socket_read($msgsock, 8192); $talkback = "收到的信息为:{$buf}\r\n"; echo $talkback; if(++$count > 5) { break; } socket_close($msgsock); } while(true); socket_close($socket);
4、创建slient客户端
基本步骤:
- 使用TCP协议创建一个socket资源
- 连接socket服务器
- socket_write 传输数据
- socket_read 接收数据
- 关闭socket资源
5、客户端代码实现
<?php echo '****************client*****************<br/>'; //设置 IP 和 端口 $port = 1935; $ip = '127.0.0.1'; //超时设计 set_time_limit(0); //创建TCP协议的socket资源 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('socket_create 失败:'.socket_strerror($socket)); echo '创建成功<br/>'; $restult = socket_connect($socket, $ip, $port); echo '连接成功<br/>'; $in = '创建一个sokcet客服端成功,随机编号='.rand(1000,9999); if(socket_write($socket, $in, strlen($in))) { echo '发送成功,发送信息为'.$in.'<br/>'; } else { echo '发送失败,原因为'.$socket_strerror($socket).'<br/>'; } while($out = socket_read($socket, 8192)) { echo '接收信息成功,信息为'.$out.'<br/>'; } echo 'socket关闭<br/>'; socket_close($socket); echo '关闭完成<br/>';
6、开启客服端
7、使用客户端连接服务端
服务端状态:
到这里socket的基本连接就差不多了。
8、相关行数介绍
8.1、socket_create
用于创建一个socket资源,成功返回一个套接字,失败返回false;
详情参考:http://www.php.net/manual/zh/function.socket-create.php
8.2、socket_bind
绑定一个名称到socket,成功返回true,失败返回时false;
详情参考:http://php.net/manual/en/function.socket-bind.php
8.3、socket_listen
监听一个socket资源,成功返回true,失败返回时false;
详情参考:http://php.net/manual/zh/function.socket-listen.php
、
8.4、socket_accept
合法创建一个子socket,成功返回一个新的socket资源,失败返回false;
详情参考:http://www.php.net/manual/en/function.socket-accept.php
8.5、socket_read
读取客服端发送的信息,成功返回读取的信息,否则返回空字符串
(socket_read() returns a zero length string ("") when there is no more data to read.)
详情参考:http://www.php.net/manual/en/function.socket-read.php
8.6、socket_write
想socket写入数据到缓存
详情参考:http://php.net/manual/en/function.socket-write.php
8.7、socket_close
关闭socket资源
详情参考:http://php.net/manual/zh/function.socket-close.php
8.8、socket_strerror
获取错误信息
详情参考:http://php.net/manual/zh/function.socket-strerror.php