Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7655290
  • 博文数量: 1770
  • 博客积分: 18684
  • 博客等级: 上将
  • 技术积分: 16357
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-02 10:28
个人简介

啥也没写

文章分类

全部博文(1770)

文章存档

2024年(15)

2023年(44)

2022年(39)

2021年(46)

2020年(43)

2019年(27)

2018年(44)

2017年(50)

2016年(47)

2015年(15)

2014年(21)

2013年(43)

2012年(143)

2011年(228)

2010年(263)

2009年(384)

2008年(246)

2007年(30)

2006年(38)

2005年(2)

2004年(1)

分类: LINUX

2010-06-24 23:48:48

fsockopen
以socket方式打开一个连接
我最常用的是模拟post
这个是小李挖掘的到的...不错
至于要模拟get方式....直接file_get_content就行了.
代码见后面
 
stream_socket_client, 代码见后面
这个和fsockopenfsockopen一样.以socket方式打开一个连接,只是参数不同
 
stream_socket_server
建立一个socket server端, 代码见后面
如果是建立的是tcp的server 就用stream_socket_accept进行通讯
如果是建立的是udp的server 就用stream_socket_recvfrom和stream_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.csdn.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)
\n";
} else {
    fwrite($fp, "\n");
    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.csdn.net/mayongzhan/
 */
header("Content-type: text/html;charset=utf-8");
//设置不超时.服务端当然不能超时
set_time_limit(0);
//得到可用socket
$xportlist = stream_get_transports();
echo "transports:\n";
foreach ($xportlist as $value) {
 echo "{$value}\n";
}
//定义一些东西
$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})\n";
}
else {
 echo "listening {$xport}:{$port} ...\n";
 if ($xport=='tcp') {
  //许可一个socket连接,-1超时
  while ($conn = stream_socket_accept($socket,-1)) {
   //得到访问的端口
   $peer = stream_socket_get_name($conn,true);
   echo "$peer\n";
      fwrite($conn, 'The local time is ' . date("Y-m-d H:i:s\n"));
      fclose($conn);
  }
 }
 elseif ($xport=='udp') {
  do {
   //得到访问的端口
      $pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
      echo "$peer\n";
      stream_socket_sendto($socket, date("Y-m-d H:i:s\n"), 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.csdn.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\n", $url['path'], $url['query'] ? "?" : "", $url['query']));
 fputs($fp, "Host: $url[host]\n");
 fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
 fputs($fp, "Content-length: " . strlen($encoded) . "\n");
 fputs($fp, "Connection: close\n\n");
 fputs($fp, "$encoded\n");
 //接受
 $line = fgets($fp,1024);
 if (!eregi("^HTTP/1\.. 200", $line)) return "返回结果错误";
 //滤掉空行
 $results = "";
 $inheader = 1;
 while(!feof($fp)) {
  $line = fgets($fp,1024);
  //把剩余的头信息过滤掉
  if ($inheader && ($line == "\n" || $line == "\r\n")) {
   $inheader = 0;
  }elseif (!$inheader) {
   $results .= $line;
  }
 }
 fclose($fp);
 return $results;
}
echo virtualPost('',array(myz=>'马永占'));
 
?>

 
阅读(1614) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~