PHP与C++通信,发送整型数据。

原创 2012年06月05日 15:43:15

function MyFunc($userid, $guid)
{
 //固定包头
 //包ID = (1053)D = (041D)H
 //加密码 = 0
 //包Len = 8
 $packetHead = "\x1D\x04\x00\x08\x00\x00\x00";
 Print($userid);
 Print($guid);
 
 //构造包体
 //UserID
 $param1 = getNetByteStream($userid);
 //Guid
 $param2 = getNetByteStream($guid);
 $packetBody = $param1.$param2;
 
 $address = "192.168.0.108";
 $service_port = 9005;
 $content = $packetHead.$packetBody;
 
 if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))< 0)
   echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
   //echo "Attempting to connect to '$address' on port '$service_port'...";
   if (($result = socket_connect($socket, $address, $service_port))< 0)  
   echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
   $res = socket_write($socket, $content, 15);
   socket_close($socket);
}

 

//得到用于传输的网络字节流
function getNetByteStream($n) {
 
 $array = array(0,0,0,0,0,0,0,0);
 $i = 0;
 
 //先转成16进制
 $temp = $n;
 while ($temp != 0) {
  $i++;
  $array[8-$i] = $temp%16 ;
  $temp = floor($temp/16);
 }
 
 //字节倒序
 for ($i = 0; $i < 4; $i+=2) {
   $t1 = $array[$i];
   $t2 = $array[$i+1];
     $array[$i] = $array[6-$i];
     $array[$i+1] = $array[7-$i];
     $array[6-$i] = $t1;
     $array[7-$i] = $t2;
 }
 
 //再转换回来,生成字节流
 $strRet = "";
 for ($i = 0; $i < 8; $i += 2) {
     $xxx = $array[$i]*16 + $array[$i+1];
     $strRet = $strRet.chr($xxx);
 }
 
 return $strRet;
 
 }

 

 

假设要生成的struct 结构是这样子的,
struct TEST{
char name[10];
char pass[33];
int age;
unsigned char flag;
};
在php中我用类模拟这个结构体
[php]
class struct{
var $name;
var $pass;
var $age;
var $flag;
function __construct($name,$pass,$age,$flag){
$this->name=$name;
$this->pass=$pass;
$this->age=$age;
$this->flag=$flag;
pack("a10",$this->name);
pack("a33",$this->pass);
pack("i*",$this->age);
pack("C*",$this->flag);
settype($this->name,'string');
settype($this->pass,'string');
settype($this->flag,'int');
settype($this->flag,'string');
}
}
$st=new struct();
$st->name="Test";
$st->pass="Test";
$st->age="5";
$st->flag="1";
print_r($st);
[/php]

  1. $msg = pack("a10",$this->name);
  2. $msg .= pack("a33",$this->pass);
  3. $msg .= pack("i*",$this->age);
  4. $msg .= pack("C*",$this->flag);
  5. 就是把数据转成二进制,序列,$msg作为包通过socket,发给c++

  6. 当然如果c++ 回给你的包里面有是结构的,二进制序列,你就得用unpack安之前的顺序来解包

  7. 不管是c++还是php 发包,都要转成二进制序列, 这个序列的顺序,当然是双方沟通后的结构,也可以是单方定后,告诉另一方.
  8. 和写文件一样, 不能一下把一个结构体写到文件里吧.一项一项的顺序还是自己定的

 

 

php和c++socket通讯(基于字节流,二进制)

研究了一下PHP和C++socket通讯,用C++作为服务器端,php作为客户端进行. socket通讯是基于协议的,因此,只要双方协议一致就行. 关于协议的选择:我看过网上大部分协议都是在应用层的协...
  • zouhao619
  • zouhao619
  • 2013年06月03日 21:19
  • 14780

C++编写发送自定义TCP数据包程序

#include #include #include #include #include #include #include #pragma comment(lib,"ws...
  • e_wsq
  • e_wsq
  • 2013年10月16日 03:15
  • 3026

php编写TCP服务端和客户端程序

1、修改php.ini,打开extension=php_sockets.dll 2、服务端程序SocketServer.php
  • anda0109
  • anda0109
  • 2015年06月26日 23:17
  • 13902

PHP入门(5) C++和PHP二进制传输

C++需要实现PHP端的:bin2Hex函数,PHP通过这种类型的字符串调用:pack转换成PHP能识别的2进制数据。 QString dataToStr(char* data1,int len) {...
  • A289672082
  • A289672082
  • 2016年07月06日 18:33
  • 693

xmlrpc实现php和后台c++的通信

  • 2014年05月06日 10:41
  • 23.04MB
  • 下载

php调用c++程序例子

现需要php调用c++程序,参考了网上一篇文章,修改后在本机(fedora7)上测试通过,现整理如下。一、 编写test.cpp程序 转到你的apache服务器的站点目录下(即放置web文件的目录)...
  • ysu108
  • ysu108
  • 2015年08月09日 16:50
  • 1563

PHP + Socket 发送http请求进而实现网站灌水

本质上实现组装http信息的请求行,头信息,主题信息,参考it自学网
  • buyingfei888
  • buyingfei888
  • 2014年11月03日 15:27
  • 1442

php 面试题 二

题1:设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示! 答案:尼玛。都没明白出这题目是干嘛...
  • u010678847
  • u010678847
  • 2017年08月15日 12:01
  • 295

java向C++发送字符串数据

最近在做java和C++通信,首先一个难题就是java发送给C++的字符串比如“String”总是和C++端的“String”匹配不上,开始还以为是编码的问题,之后想起C++的字符串处理时会在最后加一...
  • yuguanquan1990
  • yuguanquan1990
  • 2014年03月03日 17:12
  • 771

java和C++互调----(传递基本数据类型和对象)

参考文章:java和C++互相调用例子http://blog.csdn.net/huutu/article/details/11686705JNI的apihttp://docs.oracle.com/...
  • aa4790139
  • aa4790139
  • 2015年03月05日 10:40
  • 1337
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP与C++通信,发送整型数据。
举报原因:
原因补充:

(最多只允许输入30个字)