PHP XML Socket编程 服务端接收到多个连续xml等错误的解决办法
来源:互联网 发布:jrnl java 编辑:程序博客网 时间:2024/05/18 09:57
在PHP + FLASH 游戏的编程中,经常碰到需要PHP使用Socket 和Flash 的XMLsocket 进行交互。
PHP的在处理socket客户端发送过来的数据时,会有以下四种情况:
1、正常数据,如:
<data><items><item>1</item><item>2</item></items></data>
2、密集的多条数据(是通过一次TCP过程),如:
<data><items><item>1</item><item>2</item></items></data><data><items><item>1</item><item>2</item></items></data>
3、超长的数据分多次发送,如:
1)
<data><items><item>1</item>
2)
<item>2</item><item>32</item
3)
></items></data>
4、错误的数据,如:非xml数据,不完整的xml数据等。
分割线
下面是本人在项目中使用的解决办法:
<?php//...为省略代码//.... $bytes = socket_recv($socket, $buffer, 4096, 0); // CLIENT HAS SENT DATA$this->parseRequest($socket, $buffer); //... /** * 处理收到的XML请求 */private function parseRequest($socket, $data) {try { //情况2 $xmlNum = substr_count($data,"\0"); if($xmlNum){ $xmls = explode("\0",$data);//多条并行的socket数据之间会用\0分割 foreach($xmls as $xml_data){ $this->parseRequest($socket, $xml_data); } return; }//正常的处理代码 情况1//...}catch(Exception $e) {//错误的xml处理(情况3和4),由于多个xml并行发送情况,不会产生错误,所以不会转到这里处理。 if($this->xmlData) {// if($this->xmlData !=($this->xmlData.$data)) { $this->xmlData .= $data; $this->parseRequest($socket, $this->xmlData); } } $this->xmlData = $data;//失败则记录 }} ?>
这几个错误的处理方式,不限于xml socket 其他的socket通信同样适用。
- PHP XML Socket编程 服务端接收到多个连续xml等错误的解决办法
- 服务端接收到客户端发送的文件名,并把文件的内容返回给客户端
- 使用axis调用webservice时,服务端接收到的参数为null
- 使用CXF时服务端接收到的参数值为null
- 收到的XML转成dataset型
- android编程中遇到的关于Error parsing XML: unbound prefix错误的原因及解决办法
- 举例说明android编程中遇到Error parsing XML: unbound prefix错误的原因及解决办法
- PHP获取多个XML文件的内容
- 我的第一个php生成xml
- PHP自学--XML编程
- 使用 PHP 和 Ajax 的 XML 编程
- android的XML连续动画
- Servlet下的web.xml报的错误 解决办法
- android编程中遇到的Caused by: android.view.InflateException: Binary XML file line #13错误的原因及解决办法
- 读取XML空节点出现缺少对象错误的解决办法
- 无法显示 XML 应有分号错误的解决办法
- 打开EXCEL时,报XML错误的解决办法
- 关于web.xml中<web-app>错误提示的解决办法
- 一个activity中多个handler和消息的处理过程
- Tomcat 数据源 -- 原理、配置、使用
- Java笔记(五) 继承和访问控制
- Java'笔记(六) 方法重写和super关键字
- 我对DX11的理解和简化框架与快速游戏制作(续6)
- PHP XML Socket编程 服务端接收到多个连续xml等错误的解决办法
- 【分享】说说标准——CSS核心可视化格式模型(visual formatting model)之二:控制框(Controlling Box)的形成
- 在lua 中启用luasock的问题
- 怎样使用Eclipse来开发Android源码
- 在Eclipse中开发Android系统的内置应用(Mms, Contacts ect)
- 黑马程序员_学习笔记1泛型及动态代理类的总结
- Optimize InnoDB Table遇到的问题
- windows环境下搭建php mysql的仁你生不起啊
- Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第三部分:SqlField)