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 中文处理函数集合
Aug 27 PHP
php函数之子字符串替换&amp;#65279; str_replace
Mar 23 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
在WordPress中使用wp-cron插件来设置定时任务
Dec 10 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
php similar_text()函数的定义和用法
May 12 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
php 数据结构之链表队列
Oct 17 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
php文件上传原理与实现方法详解
Dec 20 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的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
javascript 多级checkbox选择效果
2009/08/20 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
python使用arp欺骗伪造网关的方法
2015/04/24 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
python处理document文档保留原样式
2019/09/23 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
如何提高python 中for循环的效率
2020/04/15 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
优秀德育工作者事迹材料
2014/05/07 职场文书
2015年人事专员工作总结
2015/04/29 职场文书