文件:phpinput_post.php 发送post数据(流数据),利用socket发送

<?php
/**
* 客服端发送post流数据的请求
*/

//对数据进行封包
function parkByArr($arr){
$atArr = array();
foreach ($arr as $k => $v){
$atArr[]=pack($v[0], $v[1]);
}
return $atArr;
}

//c/c++也可以按照这种格式打包数据
$format = array(
"username" => array("A20","张三adfb12"),
"pass" => array("A10","asdf*#1"),
"age" => array("C","23"),
"birthday" => array("I","19900101"),
"email" => array("A50","zhangsan@163.com")
);

//各个数据之间以\0分割连成字符串
$stream = implode("\0",parkByArr($format));

$http_entity_body = $stream; //要发送的数据
$http_entity_type = 'application/x-www-from-urlencoded'; //发送的格式
$http_entity_length = strlen($http_entity_body);
$host = '127.0.0.1'; //数据发送ip
$port = '80'; //端口
$path = '/phpinput_server.php'; //发送的url,注意要带上路径啊,我这里两个文件都在根目录,所以不影响
$fp = fsockopen($host, $port, $error_no, $error_desc, 30); //开启socket

//发送post请求给url: phpinput_server.php
if($fp) {
fputs($fp, "POST {$path} HTTP/1.1\r\n");
fputs($fp, "HOST: {$host}\r\n");
fputs($fp, "Content-type: {$http_entity_type}\r\n");
fputs($fp, "Content-Length: {$http_entity_length}\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $http_entity_body."\r\n\r\n");
while(!feof($fp)) {
$d .= fgets($fp, 4096);
}
fclose($fp);
echo $d;

}

?>

文件:phpinput_server.php 接受post请求并解包,把接受到的数据写入文件test.php

<?php
/**
* 服务端接受客服端post过来的数据(流数据)
*/

//根据包的格式解包地址
function unparkByArr($post_str,$format){
$Arr = explode("\0",$post_str); //post数据是以\0分割的
$atArr = array();
$i = 0;
foreach($format as $k=>$v){
$tmp = unpack($v[0],$Arr[$i]);
$atArr[$k] = $tmp[1];
$i++;
}
return $atArr;
}

//解包的格式,和打包的格式一致
$format = array(
"username" => array("A20"),
"pass" => array("A10"),
"age" => array("C"),
"birthday" => array("I"),
"email" => array("A50")
);

//接受post请求
$post_data = file_get_contents('php://input', 'r');

//解包操作
$post_data = unparkByArr($post_data,$format);

//写入文件方便查看
file_put_contents('text.php', "<?php \n\$package=".var_export($post_data, ',')."\n?>");

?>

用这种方式可以实现c/c++和php的进行数据通讯

示例下载地址:http://tpblog.googlecode.com/files/php%E7%9A%84socket%E5%8F%91%E9%80%81post%E8%AF%B7%E6%B1%82%E7%A4%BA%E4%BE%8B.zip

转载于:https://www.cnblogs.com/php5/archive/2012/08/31/2665595.html

用socket发送流数据示--用 php://input? 接受post数据(可实现php和c/c++数据通讯)相关推荐

  1. python socket发送组播数据_python3通过udp实现组播数据的发送和接收操作

    本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息. 通过抓包发现,海康摄像头发送.接收数据使用udp协议,后来比较发现,使用python模拟起来比较简 ...

  2. linux非阻塞的socket发送数据出现EAGAIN错误的处理方法

    一.非阻塞socket 非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回.比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上.在 ...

  3. Python 通过socket发送list和字典数据

    发送端 import socket import json ip = '10.211.55.20' port = 8893 sock = socket.socket(socket.AF_INET,so ...

  4. Flutter 中 Dio 和 Socket 发送 和 接收 Protobuf 数据

    dio和socket Dio 使用 proto Socket 使用 proto Dio 使用 proto 在pubspec.yaml 安装 dio dio: ^4.0.6 编译protobuf文件 p ...

  5. python socket发送TCP数据

    python socket发送TCP数据 用python写socket发送 TCP的数据 import socket import time #客户端发送500个包 创建socket.连接.发送.关闭 ...

  6. python udp 直播_[Python] socket发送UDP广播实现聊天室功能

    原博文 2018-11-24 12:33 − 一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Wi ...

  7. c++socket发送文字少一个字符_Socket粘包问题的3种解决方案,最后一种最完美

    在 Java 语言中,传统的 Socket 编程分为两种实现方式,这两种实现方式也对应着两种不同的传输层协议:TCP 协议和 UDP 协议,但作为互联网中最常用的传输层协议 TCP,在使用时却会导致粘 ...

  8. python怎么发送代码文件_python 通过 socket 发送文件的实例代码

    目录结构: client: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket, struct, json download_dir = ...

  9. 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方式

    今天用安卓通过Socket发送数据到电脑上使用C语言写的服务端,发送英文没有问题,可当把数据改变成中文时,服务端接收到的数据确是乱码. 突然想到.VS的预处理使用的是ANSI编码.而安卓网络数据都是U ...

最新文章

  1. 2017年深度学习优化算法最新进展:改进SGD和Adam方法
  2. boost::system模块实现动态链接库的测试程序
  3. VTK:InfoVis之DelimitedTextReader
  4. angular2学习记录-给后端程序员的经验分享
  5. Resco Photo Viewer for WinCE6.0
  6. java gdal postgresql_使用GDAL/OGR操作Postgresql数据库
  7. sql 排序 分组 层级 筛选 - God聚会啊
  8. 使用临时表关联数据时效率低的问题
  9. linux处理除零异常,linux – 如何在x86程序集中使用中断来触发被零除错误异常?...
  10. Tomcat安装之前为什么要安装JDK
  11. 【转】eclipse 查看原始类出现The jar file rt.jar has no source attachment解决方法
  12. Android SDK 和 JDK 安装
  13. GitLab之Runner注册K8S
  14. ewebeditor 3.8php漏洞,eWebEditor v3.8 列目录漏洞【asp版本】
  15. D3.js用动画渲染数据集的显示
  16. BSN智能合约开发培训-CITA(三)
  17. 物联平台纷争,能否拯救智能硬件?
  18. Android 高德地图计算 Circle 计算上下左右四个点经纬度,Circle和Polygon是否全部包含,计算地图中点到线的最短距离
  19. 判断南红价值,“红“的等级是关键
  20. 核高基是什么意思 为什么要搞核高基 核高基与我们有啥关系

热门文章

  1. java sqlite busy_使用select语句锁定[SQLITE_BUSY]数据库文件
  2. java集群调度_集群环境下定时调度的解决方案之Quartz集群
  3. mongodb的数据怎么导入到hdfs上_如何成为一名合格的数据架构师?
  4. 未来智慧城市长啥样?华为云让我们到深圳看一看
  5. 5G+AI能带来什么新机遇?工业和学术界大咖带来一次深度剖析
  6. 跌了2个京东,又跌了2个小米,苹果手机终于卖不动了
  7. 什么是redis缓存穿透, 缓存雪崩, 缓存击穿
  8. xml配置javaBean的IOC实现示例
  9. 写通俗易懂代码-用卫语句替代嵌套条件表达式
  10. Bootstrap Wizard 多步表单控件