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完整的日历类(CLASS)
Nov 27 PHP
PHP中的extract的作用分析
Apr 09 PHP
PHP中10个不常见却非常有用的函数
Mar 21 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
PHP模块化安装教程
Jun 01 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
php的无刷新操作实现方法分析
Feb 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
php多文件上传实现代码
2014/02/20 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
js倒计时显示实例
2016/12/11 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
python中类的一些方法分析
2014/09/25 Python
python实现猜单词小游戏
2020/05/22 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
python实现动态数组的示例代码
2019/07/15 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
军人违纪检讨书
2014/02/04 职场文书
专业技术职务聘任书
2014/03/29 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
建筑结构施工求职信
2014/07/11 职场文书
毕业实习感受与体会
2015/05/26 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL
Java中的Kotlin 内部类原理
2022/06/16 Java/Android
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS