【php】socket编程基础知识
来源:互联网 发布:投资理财app源码 编辑:程序博客网 时间:2024/04/29 11:58
php socket基础知识
两个程序相互通信连接实现的数据交换,连接的一端叫socket.每一个服务创建一个socket,并且绑定一个端口,不同的端口对应不同的服务。服务端socket监听端口等待被连接,客户端socket连接发起请求.
使用socket建立一个http连接
http协议是一个基于tcp协议的应用层协议,我们可以使用socket去发送一个http请求。
简单的使用socket创建GET请求
<?php// domain 可用的地址/协议// type 套接字使用的类型// protocol 协议名称<?php// 创建socket套接字$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);// 连接http服务器socket_connect($socket, "localhost",80);// 发送GET请求$buf = "GET http://localhost/helloworld.php?v=1\r\n";$buf .= "Host:localhost\r\n";$buf .= "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\r\n";$buf .= "Connection:keep-alive\r\n";socket_write($socket,$buf,strlen($buf)) or sprintf( "Unable to write to socket: %s", socket_strerror(socket_last_error()));$recive = "";while( "" !== ($read = socket_read($socket, 1024))){ $recive .= $read;}// 关闭请求socket_close($socket);// 接受内容echo $recive;
服务端 helloworld.php代码
<?phpecho "Hello World <br />";if(isset($_GET['v'])){ echo "Version: {$_GET['v']}";}
php Http.php
运行结果
Hello World <br />Version: 1
使用fsockopen创建http POST请求
方法介绍
resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
客户端脚本
<?php// 打开socket连接资源$fp = fsockopen("127.0.0.1",80,$errno,$errstr,5);// 如果无法打开连接则提示失败if(!$fp){ die("$errstr ($errno)<br />\n");}$data = http_build_query(array( "username" => "liyl", "pass" => "123456" ));$out = "POST /post.php HTTP/1.1\r\n";$out .= "Host: localhost\r\n";$out .= "Content-Length:" .strlen($data). "\r\n";$out .= "Content-Type:application/x-www-form-urlencoded\r\n";$out .= "Connection: keep-alive\r\n\r\n"; // 头部与内容两个换行$out .= $data ."\r\n\r\n"; // 结尾两个换行fwrite($fp,$out); // 写入流$ret = "";// while( "" !== ($read = fread($fp,8192)) ){// $ret .= $read;// }while(!feof($fp)){ $ret .= fgets($fp,1280);}fclose($fp);echo $ret;
服务端脚本
<?phpif($_SERVER['REQUEST_METHOD'] == "POST"){header("Content-Type:text/css;charset=UTF-8;");echo "recive:";print_r($_POST);exit; }?><form action="" method="POST"><input type="hidden" name="test" value="test"><button submit>GO</button> </form>
php HttpPost.php
运行结果
HTTP/1.1 200 OKDate: Sat, 30 Apr 2016 07:03:52 GMTServer: Apache/2.2.15 (CentOS)X-Powered-By: PHP/5.6.20Content-Length: 61Connection: closeContent-Type: text/html; charset=UTF-8recive:Array( [username] => liyl [pass] => 123456)
先打开了一个网络连接,然后发送了报头和报文.同时将响应的内容追加在这个网络连接中
小结
作为php语言本身来说,它更加适合做一个socket客户端,服务端的编写我们更愿意交给c语言,java语言。原因在于这些语言有更好的解决并发的特性
只要我们遵循一定的网络协议.就可以实现不同程序的数据通信
网络编程是一门很大的学问
0 0
- 【php】socket编程基础知识
- PHP Socket基础知识
- Socket编程基础知识
- Socket编程基础知识
- Socket编程基础知识
- Socket编程基础知识
- socket编程之基础知识
- Socket编程的基础知识
- socket编程基础知识
- Linux Socket编程基础知识
- Socket编程基础知识
- Socket 编程基础知识
- python socket编程基础知识
- Java Socket 网络编程基础知识
- iOS中的Socket编程,Socket基础知识(一)
- PHP Socket 编程
- PHP Socket 编程
- PHP和Socket编程
- T4模板
- vtk智能指针
- 1017. A除以B (20)
- 蛇形填数 (一)
- Java基础——Map接口
- 【php】socket编程基础知识
- Raspberry pi3 入门一
- 150. Evaluate Reverse Polish Notation
- HNOI2016题解
- 自考总结
- 1018. 锤子剪刀布 (20)
- java接口Interface
- MySQL级联删除和更新
- 机房重构——观察者模式上下机