一个菜鸟朋友,突然问了我这个问题...现在稍稍有点时间,就写了一个简单的例子给他,顺便贴上来

服务器端:

<?php
/*** @author 邹颢    zouhao619@gmail.com*/
class SocketServer{private $_port='9000';private $_address='127.0.0.1';private $_client_socket_list=array();public function __set($name,$val){$this->$name=$val;}private function _showError($error){exit($error);}/*** 开始进行socket服务器端监听端口*/public function start(){// 创建端口if (($sock = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP )) === false) {$this->_showError("socket_create() failed :reason:" . socket_strerror ( socket_last_error () ));}// 绑定if (socket_bind ( $sock, $this->_address, $this->_port ) === false) {$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ));}// 监听if (socket_listen ( $sock, 5 ) === false) {$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ) );}do {//当有一个客户端连接的时候if ($client_socket=socket_accept ( $sock )) {$count = count ( $this->_client_socket_list ) + 1;//把新来的用户加入 客户端数组里$this->_client_socket_list[]=$client_socket;echo "new connection:\r\n";//服务器端输出当前正在连接的客户端数量echo "current connection:{$count}\r\n";//接受客户端传过来的字符串$msg=$this->read($client_socket);echo "client:{$msg}\r\n";//服务器向客户端传值$my_msg="I am fine,think you\r\n";$this->send($client_socket,$my_msg);}/*** 这段代码给你参考,用来判断是否有客户端主动失去连接else{foreach ( $this->_client_socket_list as $socket ) {$len = socket_recv ($socket, $buffer, 2048, 0 ); // 接受一下客户端信息,如果为0代表断开连接if ($len < 7) {//这里写是去连接的客户端业务}}}*/}while(true);    }/*** 发送数据给客户端*/public function send($client_socket,$str){  return socket_write ( $client_socket,$str, strlen ( $str ) );}/*** 从客户端接受数据*/public function read($client_socket){return socket_read ( $client_socket, 8192 );//8192实际代表的接受长度,我用819292表示长一点,这样长一点的字符串也可以接受到,不到8192也没关系,会自动识别}}
$socket_server =new SocketServer();
$socket_server->start();//开始监听

客户端:

<?php
/*** @author 邹颢    zouhao619@gmail.com*/
class SocketServer{private $_port='9000';private $_address='127.0.0.1';private $_client_socket_list=array();public function __set($name,$val){$this->$name=$val;}private function _showError($error){exit($error);}/*** 开始进行socket服务器端监听端口*/public function start(){// 创建端口if (($sock = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP )) === false) {$this->_showError("socket_create() failed :reason:" . socket_strerror ( socket_last_error () ));}// 绑定if (socket_bind ( $sock, $this->_address, $this->_port ) === false) {$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ));}// 监听if (socket_listen ( $sock, 5 ) === false) {$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ) );}do {//当有一个客户端连接的时候if ($client_socket=socket_accept ( $sock )) {$count = count ( $this->_client_socket_list ) + 1;//把新来的用户加入 客户端数组里$this->_client_socket_list[]=$client_socket;echo "new connection:\r\n";//服务器端输出当前正在连接的客户端数量echo "current connection:{$count}\r\n";//接受客户端传过来的字符串$msg=$this->read($client_socket);echo "client:{$msg}\r\n";//服务器向客户端传值$my_msg="I am fine,think you\r\n";$this->send($client_socket,$my_msg);}/*** 这段代码给你参考,用来判断是否有客户端主动失去连接else{foreach ( $this->_client_socket_list as $socket ) {$len = socket_recv ($socket, $buffer, 2048, 0 ); // 接受一下客户端信息,如果为0代表断开连接if ($len < 7) {//这里写是去连接的客户端业务}}}*/}while(true);    }/*** 发送数据给客户端*/public function send($client_socket,$str){  return socket_write ( $client_socket,$str, strlen ( $str ) );}/*** 从客户端接受数据*/public function read($client_socket){return socket_read ( $client_socket, 8192 );//8192实际代表的接受长度,我用819292表示长一点,这样长一点的字符串也可以接受到,不到8192也没关系,会自动识别}}
$socket_server =new SocketServer();
$socket_server->start();//开始监听

注意事项:服务器端请用CLI模式运行,cgi模式会超时,新手常喜欢犯的错误.什么是CLI模式,简单的说就是用命令行去执行,而不要用游览器打开,否则会超时的

phpsocket客户端以及服务器例子相关推荐

  1. TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)

    TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子) 每个文件或套接口都有一个访问计数,该访问计数在文件表项中维护,它表示当前指向该文件或套接口的打开的描述字个数. 每个文件, ...

  2. udp服务器php代码例子,Java客户端PHP服务器UDP穿孔示例代码

    我正在一个需要pe2p服务器的项目中工作,但是我还没有找到任何Java客户端php服务器示例代码.我了解udp打孔工作原理的概念,但是我无法在代码中工作. 我尝试过的 TheSocket.java p ...

  3. 客户端与服务器cookie

    认识cookie 第一部分: 概要 cookie是一种早期使用的客户端存储机制(现在仍在广泛使用),cookie数据会在Web浏览器和Web服务器之间传输, 因为早期cookie是针对服务器脚本设计的 ...

  4. redis(12)--事件,客户端,服务器

    目录 事件 文件事件 读事件 写事件 同时关联写事件和读事件 时间事件 实现 服务器常规操作 事件的执行与调度 客户端 客户端属性 套接字描述符 名字 标志 输入缓冲区 命令与命令参数 命令的实现函数 ...

  5. Android客户端与服务器交互方式-小结

    最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要 ...

  6. 从客户端登陆服务器的配置文件,BLE模式和配置文件

    BLE模式和配置文件(原文) 本文档探讨了BLE如何工作,特别是如何将两种BLE模式(连接和广告)用于不同的目的. 外围设备和中央设备vs服务器和客户端 当我们通过BLE连接设备时,我们将它们视为外设 ...

  7. 使用ASP.NET Core开始使用gRPC客户端和服务器

    目录 介绍 GRPC Protobuf文件 背景 先决条件 使用代码 第1步--创建gRPC服务应用程序 gRPC项目结构 构建并运行应用程序 第2步:创建客户端控制台.NET核心应用程序 添加必需的 ...

  8. 客户端与服务器的数据传输

    1.Socket网络编程之传递字符类型(图解与编码) 2015年05月09日 09:50:42 阅读数:1886 Java最初是作为网络编程语言出现的,它对网络的高度支持,使得客户端和服务器流畅的沟通 ...

  9. MYSQL 客户端与服务器关系

    数据库概念   如果想要知道mysql数据库客户端与服务器之间的关系.首先要明白什么是"数据库". 从字面意思理解,所谓"数据库",就是存放数据的库.现实中,大 ...

最新文章

  1. PTA混淆总结(就做个笔记储存一下)
  2. 微软亚研院副院长周明:从语言智能到代码智能
  3. CentOS 6.3开机自动挂载磁盘和文件夹
  4. ASP.NET中处理HTTP请求的原理 (转)
  5. 更改vsftp端口号
  6. erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术
  7. [蓝桥杯][基础练习VIP]完美的代价-贪心
  8. 数据库的数据类型及运算符
  9. all方法 手写promise_试题-手写实现一个 promise.all - 拿OFFER
  10. HistCite 的使用方法
  11. [C++] C++ Primer 笔记
  12. CCF201703-1 分蛋糕
  13. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)
  14. tensorflow随笔——图像分类、检测,语义分割综述
  15. pku 3592 Instantaneous Transference tarjan缩点重建图+spfa求最长路
  16. 开心游戏网页(附效果图)
  17. 思科命令配置使用方法介绍
  18. 浅谈美国ESS音频DAC解码芯片ES9023
  19. python任务编排_工作流中的任务编排与治理
  20. 低代码到底是银弹,还是行业毒瘤?

热门文章

  1. win8 如何摄像头测试软件,高手解说win8系统摄像头检测不到的设置教程
  2. WebRTC 之 SDP
  3. includes()的用法
  4. python中class什么意思_python – 这个代码中classmethod做了什么?
  5. php递归函数return问题
  6. 【学习笔记】arduino mega2560 和 ESP8266WIFI模块 联合调试 ①
  7. Maven报错Original error: Could not transfer artifact
  8. 超分辨率的国内外研究现状
  9. 【web安全学习篇1】VBS脚本基础编写总结
  10. eclipse 插件教程_编写Eclipse插件教程–第1部分