在某次项目中需要与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 一个空结束的(和空填充的)字节串
@ 用空字节填充绝对位置
相关推荐
在IT行业中,视频推流是在线直播服务的关键技术,它涉及到服务器端与客户端的数据传输,主要依赖于Socket编程。这个“视频推流调试.rar”压缩包包含针对Java、PHP和C++三种不同编程语言的推流调试工具,适用于开发者...
在编程领域,网络字节流读写文件是网络通信和数据传输中的常见操作。本文将深入探讨C++、Java、PHP和C#这四种语言在网络字节流读写文件方面的实现,以及它们各自的特点和差异。 首先,让我们从C++开始。C++提供了一...
总之,PHP通过Socket编程可以实现强大的网络通信功能,不仅限于Web应用,还可以作为后台服务与其他系统进行数据交互。虽然不如专门的服务器端语言如C++或Java那样高效,但在某些场景下,PHP的Socket服务器解决方案仍...
标题中的"NetAssist.rar"很可能是一个网络辅助工具的压缩包,主要针对的是与网络编程相关的开发者,特别是那些使用swoole、workerman框架以及涉及C++、Java、socket编程的人员。这个工具可能提供了方便的调试功能,...
在TCP/IP协议栈中,Socket用于建立客户端和服务器端的连接,进行双向数据流的交换,是实现网络通信的基础。 最后,提到的 **消息** 在这里可能指的是通过XMPP协议进行的即时消息传递。在XIFF和XAMPP的上下文中,...
**技术支持与通信方式**:支持64位技术,提供一致的缓冲区和消息持久化机制,具备交易调度功能和动态路由规则变更,支持多种通信方式如会话、广播通知、管道、发布/订阅,同时处理多种格式的报文,如字符串、二进制...
- 配置编译选项,例如设置数据目录、socket路径、字符集等。 - 编译和安装MySQL。 - 初始化数据库,设置root用户的密码。 - 启动MySQL服务,并检查进程状态。 3. **Nginx安装** Nginx是一个高性能的Web服务器...
`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:...
5. **IO & Socket**:理解输入输出流体系,掌握FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等流的使用,以及网络编程中的Socket通信。 二、OOAD & UML: 这部分考察的是面向对象的设计思想...
学生可能需要深入理解这些语言的语法、数据结构、控制流以及面向对象编程概念。 2. **算法与数据结构**:作为计算机科学的重要组成部分,数据结构(如数组、链表、树、图)和算法(排序、搜索、递归)是设计有效...
SSL是一种安全协议,用于在互联网上提供加密通信和数据完整性。SSL证书广泛用于保护网站的敏感数据传输。 7. OAuth OAuth是一种开放标准,允许用户提供一个令牌而不是密码来访问服务器上的资源。它广泛用于API...
3. 后端技术:PHP 和 C++ Socket 实现服务端交互,HTTP 协议进行通信。 **五、附录** 附录包含编写文档的其他参考资料和命名、代码规范,如小驼峰命名法,用于统一团队的编码风格。 总结,这份概要设计说明书详尽...
8. **网络编程**:掌握Socket编程,实现客户端和服务端的通信。 9. **反射机制**:利用反射动态地获取类的信息并调用其方法,实现动态加载和类型检查。 10. **JNI(Java Native Interface)**:允许Java代码和其他...
它不仅支持Java开发,还支持其他多种编程语言,如C/C++、PHP等。在本章中,我们将重点介绍如何使用Eclipse ME来搭建一个适合J2ME应用开发的环境。 **1.2 搭建Eclipse移动开发环境** **1.2.1 Eclipse的安装与汉化**...
但是,从给定的部分内容来看,似乎包含了Nginx与MySQL的安装步骤,而没有直接涉及Zabbix的安装过程。因此,本文将基于给定的信息,整理并扩展出关于使用源代码安装Zabbix所需的相关知识点。 ### 一、概述 Zabbix是...