PHP socket,server,cient,模拟post

 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---------------------------

 

<?php

/**

 * @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)<br /> ";

} else {

    fwrite($fp, " ");

    echo fread($fp, 1024);

    fclose($fp);

}

?>

 

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

 

<?php

/**

 * @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)---------------------------

 

<?php

/**

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

 

?>

时间: 2024-09-20 06:16:50

PHP socket,server,cient,模拟post的相关文章

指令-MFC socket server/client

问题描述 MFC socket server/client 使用MFC socket编程,想读取传感器的数据.传感器是该作为server端还是client端?为什么在网口调试助手里发送传感器内部指令没有任何反馈信息呢? 解决方案 一般的设备server端和client端都是支持的,请检查一下选择的协议是否两边的都对应,如果都是tcp就都用tcp如果是udp就都用udp. 其他的也就是楼上说的看看时候建立了连接,IP和端口,再查下数据格式是否正确. 解决方案二: 谁向谁发信息,谁就可以看作是客户端

c++-什么是socket Server 和bytearray

问题描述 什么是socket Server 和bytearray 什么是socket Server 和bytearray socket Server的工作是怎样的 解决方案 Socket Server 是 Socket 通讯的服务器端,对应于客户端.Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,

server-什么是socket Server 和bytearray

问题描述 什么是socket Server 和bytearray 什么是socket Server 和bytearray 解决方案 Socket Server 是 Socket 通讯的服务器端,对应于客户端.Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器

C# Socket Server 收不到数据

#/usr/bin/env python # -*- coding: utf-8 -*- # C# Socket Server 收不到数据 # 说明: # 最近在调Python通过Socket Client连接C#的Socket Server,但是Server端能检测到连接, # 却收不到数据,这个问题困扰了几个小时,最后是因为Python这边发送完数据,直接关闭了 # 连接,最好是sleep一点点时间再关闭Socket,这样就能正常收到数据了. # # 2016-11-09 深圳 南山平山村

?SOCKET Server bind - 在其上下文中,该请求的地址无效

问题描述 小弟初次接触socket,按照例程写了一个server端的listen程序,本机IP192.168.0.5,端口5000.运行后,在serSock.Bind(endPoint)处报错:在其上下文中,该请求的地址无效.如果在程序里把IP改成127.0.0.1,而本机的网卡IP不做任何改动,运行程序不会报错.请问这是什么原因?求帮助!下面是程序代码:ImportsSystem.NetImportsSystem.Net.SocketsPublicClassForm1PrivateSubBut

Windows Server 2003 模拟IP-SAN图文教程_win服务器

用Windows Server模拟IP-SAN测试操作系统版本:windows 2003 server sp2,软件:MS_iSCSI_Target 配置步骤: 1.       首先下载MS_iSCSI_Target,可从微软官方网站下载.Windowows 2003 对应MS_iSCSI_Target 3.1版本,windows 2008 对应MS_iSCSI_Target 3.2版本: 2.       将下载的MS_iSCSI_Target安装包解压,解压后打开MS-dos命令行,进入到

超紧急求java和vc 写得socket server通信问题。没分了,谁帮帮忙啊

问题描述 Stringst="11111";byte[]cbytes=st.getBytes();outStream.write(cbytes);outStream.flush();跟server建立连接了,但server接收不到我的数据,总是提示超时断开.我发送过char/byte类型数据,但vc写的server总是不行.我用java写的client和server之间通信都没问题.是不是我发给server的数据格式不对啊. 解决方案 解决方案二:我倒是能接收到server的数据,但是

Socket用法,简单模拟一对一聊天

http://blog.csdn.net/touch_2011/article/details/6914739 1.socket和serverSocket通信简单介绍如下,注意客户端与服务器端是怎么交换数据的     2.模拟qq聊天功能,实现客户端与服务器(一对一)的聊天功能 服务器端代码: package demo.net; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOEx

ASP中用Server.Transfer实现Rewrite模拟生成静态页效

以前刚刚懂404.asp的时候,曾经幻想把所有程序代码写到404.asp中,实现一个模拟生成静态网页的站,如果程序小还可以,用404.asp实现Rewrite还是一个不错的选择,如果程序代码多达100000行,恐怕就要开始爬了 直到看到asp的Server.Transfer,用404模拟生成静态页的站的念头重新在我的脑海中浮现出来,现在即使在大的程序,也可以用ASP中的Server.Transfer轻松搞定 <!--#include file="bin/404_Query"--&