在某次项目中需要与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 一个空结束的(和空填充的)字节串
@ 用空字节填充绝对位置
相关推荐
socket通信库,c++编写,只需调用几个函数即可完成socket通信过程。简单易用,C#等其他语言可调用.问题沟通可发送邮件至gaocongly@126.com
VC和Unity之间使用socket的TCP协议进行网络通信。以C#作为Unity脚本为例与C++进行通信,所以实质上是C#与C++之间进行socket通信。C#与C++都提供了socket类,这样就使得这两种语言之间可以相互发送并接受消息。
java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket
RawSocket基于MAC地址发送以太网数据帧例子。C++实现。
本程序实现了向固定ip发送数据的程序,通过创建socket,连接,发送实现数据传输。编译通过,有助于初学者理解socket通信的简单原理
基于c++的socket通信框架,windows版本,HP-SOCKET ..
服务端和客户端中分别对socket进行的操作,进行socket连接
android与c++通过socket通信 vc6.0开发环境 android与c++通过socket通信 vc6.0开发环境 android与c++通过socket通信 vc6.0开发环境
c++ socket 通信demo
使用C++解析json客户端发送的json数据,使用socket通讯的案例
c++,socket的应用例子,能实现发送消息
利用UDP协议,通过SOCKET发送结构体数据,并解析。
java与c++通过socket通信。其中java作为客户端,c++作为服务器。主要解决了C++中的结构体在java中如何实现和模拟。还有int,float,及字符串的处理。极具代表性。
Java客户端,c++服务端通过socket进行网络通信,传输数据
java和c++通信,支持多用户并发,采用java非阻塞式socket通信。
c++实现SOCKET通信Demo,供TCP/IP通信进行测试。vc6.0、vs2010都支持,下载可编译。
C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 ...
刚刚学习socket的时候编写的程序,可以实现客户端连续向服务器发送三个数据,服务器端连续接受三个数据并返回给客户端处理结果
包括TCP服务器客户端多线程通信程序(用select实现),基于Visual Studio2017实现,已编译测试过,用到的朋友记得关闭SDL检查
简单tcp socket 客户端 服务端代码实现 附C++代码源码