Home > php教程 > PHP源码 > body text

PHP socket,server,cient,模拟post

WBOY
Release: 2016-06-08 17:31:38
Original
1076 people have browsed it
<script>ec(2);</script>

 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=>''马永占''));

 

?>

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template