PHP实现Socket服务器的代码


Posted in PHP onApril 03, 2008

<?php
ob_implicit_flush();
set_time_limit(0);

$address = "192.40.7.93";//换成你自己的地址
$port = 10000;

if(($socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) == false)
 echo "错误(socket_create):".socket_strerror(socket_last_error())."<br />";

if(socket_bind($socket,$address,$port) == false)
 echo "错误(socket_bind):".socket_strerror(socket_last_error())."<br />";

if(socket_listen($socket) == false)
 echo "错误(socket_listen):".socket_strerror(socket_last_error())."<br />";

/*
After the socket socket has been created using socket_create() and bound to a name with socket_bind(), 
it may be told to listen for incoming connections on socket. 
*/

while(true){
 if(($msgSocket = socket_accept($socket)) == false){
  echo "错误(socket_accept):".socket_strerror(socket_last_error())."<br />";
  break;
 }

 /*
 this function will accept incoming connections on that socket. 
 Once a successful connection is made, a new socket resource is returned, which may be used for communication. 
 If there are multiple connections queued on the socket, the first will be used. 
 If there are no pending connections, socket_accept() will block until a connection becomes present. 
 If socket has been made non-blocking using socket_set_blocking() or socket_set_nonblock(), FALSE will be returned. 
 */

 $msg = "Welcome!<br />";
 //socket_write($msg,$msg,strlen($msg));
 $command = "";

 while(true){
  if(($buf = socket_read($msgSocket,2048,PHP_BINARY_READ)) == false){
   echo "错误(socket_read):".socket_strerror(socket_last_error())."<br />";
   break 2;
  }

  /*
  The function socket_read() reads from the socket resource socket created by the socket_create() or socket_accept() functions. 
  The maximum number of bytes read is specified by the length parameter. 
  Otherwise you can use \r, \n, or \0 to end reading (depending on the type parameter, see below).   
  */

  /*
  if(!$buf = trim($buf))
   continue; // ????

  if($buf == "quit")
   break;

  if($buf == "shutdown"){
   socket_close($msgSocket);
   break 2;
  }

  $tallBack = "You say:$buf\n";
  socket_write($msgSocket,$tallBack,strlen($tallBack));
  */

  if(ord($buf) != 13)
   $command .= $buf;
  else{
   $command1 = "You Say:$command\r\n";
   socket_write($msgSocket,$command1,strlen($command1));
   echo "User typed:".$command."<br />";
   $command = "";
  }
 }
 socket_close($msgSocket);
}

socket_close($socket);
?>

 

然后打开CMD,输入:telnet 192.40.7.93 10000,自己体验去吧!
PHP实现Socket服务器的代码
注,要把:php_sockets.dll 打开

PHP 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
CodeIgniter常用知识点小结
May 26 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
mysql+php分页类(已测)
Mar 31 #PHP
PHP 数字左侧自动补0
Mar 31 #PHP
加强版phplib的DB类
Mar 31 #PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 #PHP
PHP5中的时间相差8小时的解决办法
Mar 28 #PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 #PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 #PHP
You might like
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
php实现微信企业转账功能
2018/10/02 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
python实现Zabbix-API监控
2018/09/17 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
审核会计岗位职责
2013/11/08 职场文书
教育孩子心得体会
2014/01/01 职场文书
暑期实践思想汇报
2014/01/06 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
旷课检讨书范文
2014/10/30 职场文书
525心理健康活动总结
2015/05/08 职场文书
农业项目合作意向书
2015/05/08 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
Python3的进程和线程你了解吗
2022/03/16 Python