热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHPsocket,server,cient,模拟post-PHP源码

ec(2); fsockopen以socket方式打开一个连接我最常用的是模拟post这个是小李挖掘的到的...不错至于要模拟get方式....直接file_get_content就行了.代码见后面 stream_socket_client,代码见后面这个和fsockopenfsockopen一样.以socket方式打开一个连接,只是参数不同&nb

fsockopen

socket方式打开一个连接

我最常用的是模拟post

这个是小李挖掘的到的...不错

至于要模拟get方式....直接file_get_content就行了.

代码见后面

stream_socket_client, 代码见后面

这个和fsockopenfsockopen一样.socket方式打开一个连接,只是参数不同

stream_socket_server

建立一个socket server, 代码见后面

如果是建立的是tcpserver 就用stream_socket_accept进行通讯

如果是建立的是udpserver 就用stream_socket_recvfromstream_socket_sendto进行通讯,而且stream_socket_server中需要加个参数STREAM_SERVER_BIND

还有个socket扩展,这个是最基础的建立socket,但是从5.3.0开始就放到pecl中了.

这里就不介绍了.

---------------------------- stream_socket client---------------------------

/**

* @name test.php

* @date Sun Jan 27 00:49:00 CST 2008

* @copyright 马永占(MyZ)

* @author 马永占(MyZ)

* @link http://blog.111cn.net/mayongzhan/

*/

$xport = "tcp";

$port = "8001";

$ip = "127.0.0.1";

$address = "{$xport}://{$ip}:{$port}";

$fp = stream_socket_client($address, $errno, $errstr, 1);

if (!$fp) {

echo "$errstr ($errno)
";

} else {

fwrite($fp, " ");

echo fread($fp, 1024);

fclose($fp);

}

?>

---------------------------- streamSocketServer---------------------------

/**

* @name test2.php

* @date Sun Jan 27 00:45:57 CST 2008

* @copyright 马永占(MyZ)

* @author 马永占(MyZ)

* @link http://blog.111cn.net/mayongzhan/

*/

header("Content-type: text/html;charset=utf-8");

//设置不超时.服务端当然不能超时

set_time_limit(0);

//得到可用socket

$xportlist = stream_get_transports();

echo "transports: ";

foreach ($xportlist as $value) {

echo "{$value} ";

}

//定义一些东西

$xport = "tcp";

$port = "8001";

$address = "{$xport}://0.0.0.0:{$port}";

//建立socketserver

if ($xport==''tcp'') {

$socket = stream_socket_server($address, $errno, $errstr);

}

elseif ($xport==''udp'') {

$socket = stream_socket_server($address, $errno, $errstr, STREAM_SERVER_BIND);

}

if (!$socket) {

echo "{$errstr} ({$errno}) ";

}

else {

echo "listening {$xport}:{$port} ... ";

if ($xport==''tcp'') {

//许可一个socket连接,-1超时

while ($cOnn= stream_socket_accept($socket,-1)) {

//得到访问的端口

$peer = stream_socket_get_name($conn,true);

echo "$peer ";

fwrite($conn, ''The local time is '' . date("Y-m-d H:i:s "));

fclose($conn);

}

}

elseif ($xport==''udp'') {

do {

//得到访问的端口

$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);

echo "$peer ";

stream_socket_sendto($socket, date("Y-m-d H:i:s "), 0, $peer);

} while ($pkt !== false);

}

//关闭socket

fclose($socket);

}

?>

---------------------------- fsockopen(post)---------------------------

/**

* @name test.php

* @date Sat Jan 26 23:01:23 CST 2008

* @copyright 马永占(MyZ)

* @author 马永占(MyZ)

* @link http://blog.111cn.net/mayongzhan/

*/

/**

* php 发送POST请求

*

* @param string $url 提交到的地址

* @param array $data 要提交的参数 array(''a''=>'''',''b''=>'''');

* @return string

*/

function virtualPost($url, $data) {

$url = parse_url($url);

if (!$url) return "URL不能解析";

if (!isset($url[''port''])) $url[''port''] = "";

if (!isset($url[''query''])) $url[''query''] = "";

$encoded = "";

while (list($k,$v) = each($data)) {

$encoded .= ($encoded ? "&" : "");

$encoded .= rawurlencode($k)."=".rawurlencode($v);

}

//$fp = stream_socket_client($url[''host''].":".($url[''port''] ? $url[''port''] : 80));

$fp = fsockopen($url[''host''], $url[''port''] ? $url[''port''] : 80);

if (!$fp) return "不能打开到$url[host]的连接";

//发送

fputs($fp, sprintf("POST %s%s%s HTTP/1.0 ", $url[''path''], $url[''query''] ? "?" : "", $url[''query'']));

fputs($fp, "Host: $url[host] ");

fputs($fp, "Content-type: application/x-www-form-urlencoded ");

fputs($fp, "Content-length: " . strlen($encoded) . " ");

fputs($fp, "Connection: close ");

fputs($fp, "$encoded ");

//接受

$line = fgets($fp,1024);

if (!eregi("^HTTP/1.. 200", $line)) return "返回结果错误";

//滤掉空行

$results = "";

$inheader = 1;

while(!feof($fp)) {

$line = fgets($fp,1024);

//把剩余的头信息过滤掉

if ($inheader && ($line == " " || $line == " ")) {

$inheader = 0;

}elseif (!$inheader) {

$results .= $line;

}

}

fclose($fp);

return $results;

}

echo virtualPost(''http://127.0.0.1/test/test2.php'',array(myz=>''马永占''));

?>


推荐阅读
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 大连微软技术社区举办《.net core始于足下》活动,获得微软赛百味和易迪斯的赞助
    九月十五日,大连微软技术社区举办了《.net core始于足下》活动,共有51人报名参加,实际到场人数为43人,还有一位专程从北京赶来的同学。活动得到了微软赛百味和易迪斯的赞助,场地也由易迪斯提供。活动中大家积极交流,取得了非常成功的效果。 ... [详细]
  • 给定一个二叉树,要求随机选择树上的一个节点。解法:遍历树的过程中,随机选择一个节点即可。具体做法参看:从输入 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了在微店中如何修改分销产品的价格以及设置价格的方法。客户在拍下商品后,在1小时内可以进行修改价格的操作,通过进入订单管理,点击未付款子项,可以找到订单信息并进行改价操作。修改价格后,买家会收到改价后的短信通知,在微店订单中进行付款即可。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
author-avatar
邪恶尽头是纯洁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有