`
alfred_long
  • 浏览: 566393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP socket 发送数据流与c++通信

    博客分类:
  • PHP
阅读更多

在某次项目中需要与c++的接口进行socket通信,数据的发送与接收都是数据流,需要将发送的数据转化为数据流,再通过socket发送到对应的端口。

要点:

1对应的数据包结构(C++与PHP一致)

2 pack函数使用

3 pack函数format参数(第一个参数的正确使用),要跟c++发送的数据及C type 一致

4 format 中在每个format 对应后面 每一个参数,要在后面跟长度例:$data = pack('A5C','melon',1)

5 unpack 函数中的format 对应多个函数,用“/”分隔 例:用上面的$data ,unpack("A5mystr/Cmyint",$data),输出array('mystr'=>'melon','myint'=>1)

 

例 数据包结构 为:数据包头(2Byte) 包含数据大小, 数据内容,’\0’结尾的字符串

 

<?php
	$host='127.0.0.1;
	$port= 8080;
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);  
	if(!$socket){  
	    exit('创建socket失败');  
	}  
	$result = socket_connect($socket,$host,$port);
	$message = "recharge";
	$mlength = strlen($message);
	$length = strlen($message) + 3;
	$fmt_data = pack("sA".$mlength."C", $length, $message, 0);
	var_dump(strval($fmt_data));
	$result=socket_write($socket,$fmt_data);
	if(!$result){  
	    exit('发送信息失败');
	}
	$out = socket_read($socket,128);
        $recvmessage = strlen($out)-3;
	$ufmt_data = unpack("slenth/A".$recvmessage."meg/Cend",$out);
	var_dump($ufmt_data);
	socket_close($socket);

 

 

 附:

format参数中文说明:

pack/unpack 的摸板字符字符 含义

a 一个填充空的字节串

A 一个填充空格的字节串

b 一个位串,在每个字节里位的顺序都是升序

B 一个位串,在每个字节里位的顺序都是降序

c 一个有符号 char(8位整数)值

C 一个无符号 char(8位整数)值;关于 Unicode 参阅 U

d 本机格式的双精度浮点数

f 本机格式的单精度浮点数

h 一个十六进制串,低四位在前

H 一个十六进制串,高四位在前

i 一个有符号整数值,本机格式

I 一个无符号整数值,本机格式

l 一个有符号长整形,总是 32 位

L 一个无符号长整形,总是 32 位

n 一个 16位短整形,“网络”字节序(大头在前)

N 一个 32 位短整形,“网络”字节序(大头在前)

p 一个指向空结尾的字串的指针

P 一个指向定长字串的指针

q 一个有符号四倍(64位整数)值

Q 一个无符号四倍(64位整数)值

s 一个有符号短整数值,总是 16 位

S 一个无符号短整数值,总是 16 位,字节序跟机器芯片有关

u 一个无编码的字串

U 一个 Unicode 字符数字

v 一个“VAX”字节序(小头在前)的 16 位短整数

V 一个“VAX”字节序(小头在前)的 32 位短整数

w 一个 BER 压缩的整数

x 一个空字节(向前忽略一个字节)

X 备份一个字节

Z 一个空结束的(和空填充的)字节串

@ 用空字节填充绝对位置

分享到:
评论

相关推荐

    视频推流调试.rar java PHP c++ 推流调试工具,socket开发

    在IT行业中,视频推流是在线直播服务的关键技术,它涉及到服务器端与客户端的数据传输,主要依赖于Socket编程。这个“视频推流调试.rar”压缩包包含针对Java、PHP和C++三种不同编程语言的推流调试工具,适用于开发者...

    c++,java,php,c# 的网络字节流读写文件

    在编程领域,网络字节流读写文件是网络通信和数据传输中的常见操作。本文将深入探讨C++、Java、PHP和C#这四种语言在网络字节流读写文件方面的实现,以及它们各自的特点和差异。 首先,让我们从C++开始。C++提供了一...

    利用PHP如何实现Socket服务器

    总之,PHP通过Socket编程可以实现强大的网络通信功能,不仅限于Web应用,还可以作为后台服务与其他系统进行数据交互。虽然不如专门的服务器端语言如C++或Java那样高效,但在某些场景下,PHP的Socket服务器解决方案仍...

    NetAssist.rar

    标题中的"NetAssist.rar"很可能是一个网络辅助工具的压缩包,主要针对的是与网络编程相关的开发者,特别是那些使用swoole、workerman框架以及涉及C++、Java、socket编程的人员。这个工具可能提供了方便的调试功能,...

    xiff xampp

    在TCP/IP协议栈中,Socket用于建立客户端和服务器端的连接,进行双向数据流的交换,是实现网络通信的基础。 最后,提到的 **消息** 在这里可能指的是通过XMPP协议进行的即时消息传递。在XIFF和XAMPP的上下文中,...

    数据交换平台应用数据交换平台应用

    **技术支持与通信方式**:支持64位技术,提供一致的缓冲区和消息持久化机制,具备交易调度功能和动态路由规则变更,支持多种通信方式如会话、广播通知、管道、发布/订阅,同时处理多种格式的报文,如字符串、二进制...

    linux+nginx+mysql+php服务器配置(可用于工业生产).doc

    - 配置编译选项,例如设置数据目录、socket路径、字符集等。 - 编译和安装MySQL。 - 初始化数据库,设置root用户的密码。 - 启动MySQL服务,并检查进程状态。 3. **Nginx安装** Nginx是一个高性能的Web服务器...

    通过Websocket的测距车-项目开发

    `distance_measuring_machine.ino`文件很可能是Arduino编程的源代码,其中包含了读取编码器数据、计算距离以及通过Websocket发送这些数据的逻辑。Arduino是一种流行的开源硬件平台,它的编程语言基于C/C++,易于学习...

    阿里巴巴校园招聘笔试面试题合集

    6. 网络编程:理解Socket编程,创建TCP/UDP通信。 7. Java EE:对于Web开发,需要了解Servlet、JSP、MVC模式、Spring框架等。 **Web开发** Web开发涉及前端和后端两个部分,主要包括: 1. HTML/CSS/JavaScript:...

    java程序员必备的面试宝典秘籍.pdf

    5. **IO & Socket**:理解输入输出流体系,掌握FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等流的使用,以及网络编程中的Socket通信。 二、OOAD & UML: 这部分考察的是面向对象的设计思想...

    计算机课程作业毕设.zip

    学生可能需要深入理解这些语言的语法、数据结构、控制流以及面向对象编程概念。 2. **算法与数据结构**:作为计算机科学的重要组成部分,数据结构(如数组、链表、树、图)和算法(排序、搜索、递归)是设计有效...

    软件工程师必知的十个概念.pdf

    SSL是一种安全协议,用于在互联网上提供加密通信和数据完整性。SSL证书广泛用于保护网站的敏感数据传输。 7. OAuth OAuth是一种开放标准,允许用户提供一个令牌而不是密码来访问服务器上的资源。它广泛用于API...

    概要设计说明书1.0——端茶倒水小组1

    3. 后端技术:PHP 和 C++ Socket 实现服务端交互,HTTP 协议进行通信。 **五、附录** 附录包含编写文档的其他参考资料和命名、代码规范,如小驼峰命名法,用于统一团队的编码风格。 总结,这份概要设计说明书详尽...

    JAVA上百实例源码以及开源项目源代码

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

    java最基础到最重要的文件

    8. **网络编程**:掌握Socket编程,实现客户端和服务端的通信。 9. **反射机制**:利用反射动态地获取类的信息并调用其方法,实现动态加载和类型检查。 10. **JNI(Java Native Interface)**:允许Java代码和其他...

    J2ME培训实验手册v2.0

    它不仅支持Java开发,还支持其他多种编程语言,如C/C++、PHP等。在本章中,我们将重点介绍如何使用Eclipse ME来搭建一个适合J2ME应用开发的环境。 **1.2 搭建Eclipse移动开发环境** **1.2.1 Eclipse的安装与汉化**...

    zabbix源代码安装

    但是,从给定的部分内容来看,似乎包含了Nginx与MySQL的安装步骤,而没有直接涉及Zabbix的安装过程。因此,本文将基于给定的信息,整理并扩展出关于使用源代码安装Zabbix所需的相关知识点。 ### 一、概述 Zabbix是...

Global site tag (gtag.js) - Google Analytics