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 相关文章推荐
php下删除字符串中HTML标签的函数
Aug 27 PHP
php学习之变量的使用
May 29 PHP
php获取服务器信息的实现代码
Feb 04 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 PHP
详解PHP中的状态模式编程
Aug 11 PHP
php如何获取文件的扩展名
Oct 28 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
Laravel 创建指定表 migrate的例子
Oct 09 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
python学习教程之使用py2exe打包
2017/09/24 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python3实现名片管理系统
2020/11/29 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python Selenium 库的使用技巧
2020/10/16 Python
高二物理教学反思
2014/02/08 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
交通事故和解协议书
2015/01/27 职场文书
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS