php之简单socket编程
2015-10-31 14:38
731 查看
一、什么是套接字
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
二、php套接字实例
服务端代码:socket.php
客户端代码:client.php
三、代码演示结果
1、打开一个cmd去启动服务端
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031141402482-526441710.png)
2、再打开一个cmd去启动客户端
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031141519044-1646861516.png)
3、查看服务端对应的cmd
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031141720919-1174131464.png)
四、《HTTP权威指南》中截取的两张图片
1、TCP客户端和服务器通过TCP套接字接口进行通信的流程
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031143214591-1431131321.png)
2、对TCP连接进行编程所需的常见套接字接口函数
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
二、php套接字实例
服务端代码:socket.php
<?php error_reporting(E_ALL); set_time_limit(0); $chr_13_10 = "\r\n"; //回车 换行 //ob_implicit_flush(); $address = '127.0.0.1'; $port = 10005; //创建 套接字 if( ($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo "socket_create() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10; } //将 套接字 绑定到端口 if (socket_bind($socket, $address, $port) === false) { echo "socket_bind() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10; } //允许其它 套接字 进行连接 if (socket_listen($socket, 5) === false) { echo "socket_bind() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10; } do { //等待连接 if (($msgsocket = socket_accept($socket)) === false) { echo "socket_accepty() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10; break; } //读取客户端的信息 echo 'client message: ',$chr_13_10; $buffer = socket_read($msgsocket, 8192); echo $buffer,$chr_13_10; //将读取到的信息,返回给客户端 if (false === socket_write($msgsocket, $buffer, strlen($buffer))) { echo "socket_write() failed: ", socket_strerror(socket_last_error($msgsocket)), $chr_13_10; } //关闭本次连接 socket_close($msgsocket); } while(true); //关闭 套接字 socket_close($socket);
客户端代码:client.php
<?php $chr_13_10 = "\r\n"; //回车 换行 $service_port = 10005; $address = '127.0.0.1'; //创建 套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10; } else { echo "socket create OK", $chr_13_10; } //连接到其它 套接字 $result = socket_connect($socket, $address, $service_port); if($result === false) { echo "socket_connect() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10; } else { echo "socket connect OK", $chr_13_10; } $in = ""; if(isset($argv[1])) $in .= $argv[1]; //向已连接的 套接字 写入信息 socket_write($socket, $in, strlen($in)); echo "socket write OK", $chr_13_10; echo "Reading response-------------------------->start", $chr_13_10; $out = ""; //读取已连接的 套接字 发来的信息 while ($out = socket_read($socket, 8192)) { echo $out; } echo $chr_13_10, "Reading response-------------------------->end", $chr_13_10; socket_close($socket); echo "socket close OK",$chr_13_10;
三、代码演示结果
1、打开一个cmd去启动服务端
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031141402482-526441710.png)
2、再打开一个cmd去启动客户端
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031141519044-1646861516.png)
3、查看服务端对应的cmd
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031141720919-1174131464.png)
四、《HTTP权威指南》中截取的两张图片
1、TCP客户端和服务器通过TCP套接字接口进行通信的流程
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031143214591-1431131321.png)
2、对TCP连接进行编程所需的常见套接字接口函数
![](http://images2015.cnblogs.com/blog/671097/201510/671097-20151031143554950-1880058728.png)
相关文章推荐
- PHP正则表达式完全复习手册
- PHP输入流php://input [转]
- laravel 让phpstorm不出现undefind类的插件
- 浅谈php项目开发的总结
- 搭建php环境时解决jpeg6 make: ./libtool:命令未找到
- php设计模式小结
- php 股票信息查询类
- php ip2long 出现负数原因及解决方法
- php正则技巧,抓取、匹配中文、任意字符
- PHP中用到的一些正则
- PHP中的cURL的简单应用
- 去bom的php神器
- 【转载】RTP头结构定义
- redhat的tftp问题
- Cannot find PHPUnit in include path (.;C:\php5\pear)
- Notepad++ php格式化 支持php高亮和自动自动函数补全的功能 +安装插件的方法
- PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- php manual中的可修改范围
- PHP开发提高效率技巧