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中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
PHP3 safe_mode 失效漏洞
Oct 09 PHP
PHP 全角转半角实现代码
May 16 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 PHP
php解决安全问题的方法实例
Sep 19 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 file_get_contents设置超时处理方法
2013/09/30 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
javascript 尚未实现错误解决办法
2008/11/27 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
Python中的异常处理简明介绍
2015/04/13 Python
python实现用户登录系统
2016/05/21 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
详解Python time库的使用
2019/10/10 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
机械工程师求职自我评价
2013/09/23 职场文书
客服专员岗位职责范本
2013/11/29 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
工程承诺书怎么写
2014/05/24 职场文书
八一建军节慰问信
2015/02/14 职场文书
增值税发票丢失证明
2015/06/19 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers