HTTP协议与PHP Socket实现

来源:互联网 发布:sonos软件下载 编辑:程序博客网 时间:2024/05/17 10:56

可通过chrome开发者工具查看http的状态。

  1. Remote Address:
    210.14.147.14:80
  2. Request URL:
    http://www.ucai.cn/home/mission
  3. Request Method:
    GET
  4. Status Code:
    200 OK
  5. Request Headers
    1. Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    2. Accept-Encoding:
      gzip,deflate,sdch
    3. Accept-Language:
      zh-CN,zh;q=0.8
    4. Cache-Control:
      max-age=0
    5. Connection:
      keep-alive 长连接,close是短连接
    6. Cookie:
      TS_LOGGED_USER=RFSwEEAXOrAcG1ypLeLpm; PHPSESSID=bbvnqr51h20b3ne425v1j4btd4; TS_think_language=zh-CN; TS_login_time_2613=1408417523; CNZZDATA81391345=cnzz_eid%3D958456644-1407842879-http%253A%252F%252Fwww.baidu.com%252F%26ntime%3D1408416283; Hm_lvt_37b59124316b902e2e8185984e81034e=1408156197,1408245166,1408356698,1408416074; Hm_lpvt_37b59124316b902e2e8185984e81034e=1408417310
    7. Host:
      www.ucai.cn
    8. Referer:
      http://www.ucai.cn/train 从哪连过来的,防止CSRF攻击。
    9. User-Agent:
      Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
  6. Response Headers
    1. Access-Control-Allow-Origin:
      http://quanzhan.ucai.cn
    2. Cache-control:
      private
    3. Connection:
      close
    4. Content-Encoding:
      gzip 服务器可配置,前端优化,压缩文件
    5. Content-Type:
      text/html; charset=utf-8
    6. Date:
      Tue, 19 Aug 2014 03:05:56 GMT
    7. Expires:
      Thu, 19 Nov 1981 08:52:00 GMT
    8. P3P:
      CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR" 支持跨域请求
    9. Pragma:
      no-cache
    10. Server:
      nginx/1.5.7
    11. Transfer-Encoding:
      chunked
    12. Vary:
      Accept-Encoding
    13. X-Powered-By:
      PHP/5.3.17

socket是一组API的统称,建立scoket请求至少需要一个IP和端口。
服务器端LISTEN是监听,相当于电话接线员,等着来连。ESTABLISHED是已经建立请求。

0.0.0.0是允许所有IP来链接,127.0.0.1是只允许本机,10.131.170.167是允许局域网访问。
/etc/sysconfig/iptables 配置防火墙。
PHP Socket API
socket_create
socket_bind
socket_connect
socket_read
socket_write
socket_close
socket_listen
socket_accept
socket_strerror

<?php/** * @author  */class server{protected $ip;protected $port;public function __construct($ip, $port){$this->ip = $ip;$this->port = $port;$this->createSocket();}public function createSocket(){//resource socket_create ( int $domain , int $type , int $protocol )//创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由个套接字构成,一个运行在客户端,另一个运行在服务器端。$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);//AF = Address Family (地址族) INET = Internet ipv4if($sock<0){echo "Error:".socket_strerror($sock)."\n";}$ret = socket_bind($sock, $this->ip, $this->port);if(!$ret){echo "BIND FAILED:".socket_strerror(socket_last_error())."\n";exit;}echo "OK\n";$rs = socket_listen($sock);if($rs < 0){echo "LISTEN_FAILED:" . socket_strerror(socket_last_error()) . "\n";}do{$asock = socket_accept($sock);if($asock < 0){echo "ACCEPT_FAILED:" . socket_strerror(socket_last_error()) . "\n";break;}$buf = scoket_read($sock, 1204);if(!$buf){echo "READ_FAILED:" . socket_strerror(socket_last_error()) . "\n";break;}$msg = "Received {$buf}\n";echo $msg;socket_write($asock, $msg, strlen($msg));socket_close($asock);break;}while (True);socket_close($sock);}}$server = new server("127.0.0.1", 8110);var_dump($server);

0 0
原创粉丝点击