码迷,mamicode.com
首页 > 其他好文 > 详细

socket 初步使用

时间:2014-08-05 00:05:28      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   strong   数据   for   

   socket分为2个部分,1部分是服务器端,监听某个接口,当有客户端有请求时,自动运行代码。

第二个部分是客户端,来传送数据。

<?php
    //服务器端口
    header(‘Content-type:text/html;Charset=GBK‘);
    //服务器段程序,监听借口,并进行相应的数据处理

    /*
        socket 服务器通信整个过程
        socket_creat
        socket_bind
        socket_listen
        socket_accetp
        socket_read
        socket_write
        socket_close
    */

    //1,创建通信节点
    $socket             = socket_create(AF_INET,SOCK_STREAM,0);
    if(!$socket)
        exit(‘create error : ‘ . socket_strerror(socket_last_error()));

    //2,绑定制定端口
    $ip                 = ‘127.0.0.1‘;
    $port                 = ‘1935‘;
    $res                 = socket_bind($socket,$ip,$port);
    if(!$res)
        exit(‘bind error:‘ . socket_strerror(socket_last_error()));

    //3, 开始监听
    $res                 = socket_listen($socket);
    if(!$res)
        exit(‘listen error ‘ . socket_strerror(socket_last_error()));

    //4,接收一个通信,处理
    do {

        $msgsock         = socket_accept($socket);
        if(!$msgsock)
            exit(‘accetp error:‘ . socket_strerror(socket_last_error()));

        //读出客户端传入的数据
        $msgclient         = socket_read($msgsock, 1024);
        if($msgclient === false)
            exit(‘read error:‘ . socket_strerror(socket_last_error()));

        echo ‘收到客户端数据:‘ . $msgclient;
        //返回信息
        $remsg             = ‘已经收到请求!处理完毕!123‘;
        $res             = socket_write($msgsock, $remsg);
        if($res === false)
            exit(‘write error :‘ . socket_strerror(socket_last_error()));
        //相关操作
        echo ‘正在进行操作...‘;


        sleep(10);
        //释放资源
        socket_close($msgsock);

    }while(true);

    //5,释放资源
    socket_close($socket);
//触发端口,让服务器程序运行,端口设置为 1935
    //初始化
    $ip             = ‘127.0.0.1‘;
    $port             = ‘1935‘;
    /*
        socket链接整个过程
        1,socket_create
        第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;
        第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);
        第三个参数指定应用程序所使用的通信协议。此参数可以指定单个协议系列中的不同传输协议。在Internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。
        2,socket_connect
        3,socket_write
        4,socket_read
        5,socket_close
    */
    //1,创建通信节点
    $socket         = socket_create(AF_INET,SOCK_STREAM,0);
    if($socket === false)
        exit(‘创建节点失败!错误信息:‘ . socket_strerror(socket_last_error()));
    echo ‘创建节点成功,准备链接...‘,‘<br />‘;

    //2,开始链接
    $res             = socket_connect($socket,$ip,$port);
    if (!$res) {
        exit(‘连接节点失败!失败原因:‘ . socket_strerror(socket_last_error()));
    }
    echo ‘链接成功!准备发送....‘,‘<br />‘;

    //3,发送数据
    $buffer         = ‘发送一个请求!‘ . "\r\n";
    $res             = socket_write($socket, $buffer);
    if($res === false)
        exit(‘发送请求失败!失败原因:‘ . socket_strerror(socket_last_error()));

    //4,接受服务器回传信息
    $out             = socket_read($socket, 8192);
    if ($out === false) {
        exit(‘获取服务器回传内容失败!原因:‘ . socket_strerror(socket_last_error()));
    }
    if ($out)
        echo ‘获取到服务器回传内容--><strong style="color:red">‘ . $out . ‘</strong>‘;
    else 
        echo ‘服务器没有回传内容!‘;

    //关闭链接
    socket_close($socket);

运行后发现缺点,就是还是单进程的。

当服务器运行速度很慢时候,会造成客户端长时间的等待。不利于用户体验。

目前自己的想法是就要利用php实现多进程来配合使用,多进程的实现为一般有两种方法,一种是使用PHP自带的pcntl_*函数(仅限linux),另一种就是使用popen/proc_open,然后在php内部控制进程数量。

明天进行研究。(linux下使用fork。)

目前只是简单的了解并且使用。

socket 初步使用,布布扣,bubuko.com

socket 初步使用

标签:style   blog   color   使用   os   strong   数据   for   

原文地址:http://www.cnblogs.com/lxdd/p/3891048.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!