zoukankan      html  css  js  c++  java
  • socket详解

    <?php
    /*
     * 
     * socket主要翻译为套接字
     * 
    socket_accept — Accepts a connection on a socket
     *               接受一个socket链接
     * 
    socket_bind — 给套接字绑定名字
    socket_clear_error — 清除套接字或者最后的错误代码上的错误
    socket_close — 关闭套接字资源
    socket_cmsg_space — Calculate message buffer size
     *                   消息缓冲区大小的计算
     * 
    socket_connect — 开启一个套接字连接
    socket_create_listen — Opens a socket on port to accept connections
     *                      打开一个套接字端口接受连接
     * 
    socket_create_pair — Creates a pair of indistinguishable sockets and stores them in an array
     *                    创建一对不可区分套接字并将其存储在一个数组
     * 
    socket_create — 创建一个套接字(通讯节点)
    socket_get_option — Gets socket options for the socket
     *                   获取socket套接字选项
     * 
    socket_getpeername — Queries the remote side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type
     *                    查询给定的套接字的远程侧既可以导致主机/端口或Unix文件系统路径,依赖于它的类型
     * 
    socket_getsockname — Queries the local side of the given socket which may either result in host/port or in a Unix filesystem path, dependent on its type
     *                    查询给定的套接字的本地端可能既导致主机/端口或Unix文件系统路径,依赖于它的类型
     * 
    socket_import_stream — Import a stream
     *                      导入流
     *  
    socket_last_error — Returns the last error on the socket
     *                   返回最后的socket的错误
     * 
    socket_listen — Listens for a connection on a socket
     *               监听socket的一个链接
     * 
    socket_read — Reads a maximum of length bytes from a socket
     *            从socket读取最大长度字节
     * 
    socket_recv — Receives data from a connected socket
     *             从连接套接字接收数据
     * 
    socket_recvfrom — Receives data from a socket whether or not it is connection-oriented
     *                 从socket连接接收数据无论链接是否是面向连接
     * 
    socket_recvmsg — Read a message
     *                读取一个信息
     * 
    socket_select — Runs the select() system call on the given arrays of sockets with a specified timeout
     *              运行的select()系统指定一个给定的数组sockets,有指定的超时时间
     * 
    socket_send — Sends data to a connected socket
     *             用socket链接发送数据
     * 
    socket_sendmsg — Send a message
     *                发送一个信息
     * 
    socket_sendto — Sends a message to a socket, whether it is connected or not
     *               用socket发送一个信息,无论是链接还是没有链接
     * 
    socket_set_block — Sets blocking mode on a socket resource
     *                  设置阻塞模式的socket资源模式
     * 
    socket_set_nonblock — Sets nonblocking mode for file descriptor fd
     *                     设置无阻塞的文件描述符FD模式
     * 
    socket_set_option — Sets socket options for the socket
     *                   设置socket套接字选项
     * 
    socket_shutdown — Shuts down a socket for receiving, sending, or both
     *                 关闭一个socket接收,发送,或同时
     * 
    socket_strerror — Return a string describing a socket error
     *                 返回一个描述一个socket错误字符串
     * 
    socket_write — Write to a socket
     *              写给一个socket
     *  
     * 
     */

    server.php

    <?php //确保在连接客户端时不会超时 set_time_limit(0); $ip = '127.0.0.1'; $port = 1935; /* +------------------------------- * @socket通信整个过程 +------------------------------- * @socket_create * @socket_bind * @socket_listen * @socket_accept * @socket_read * @socket_write * @socket_close +-------------------------------- */ /*---------------- 以下操作都是手册上的 -------------------*/ if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) { echo "socket_create() 失败的原因是:".socket_strerror($sock)." "; } if(($ret = socket_bind($sock,$ip,$port)) < 0) { echo "socket_bind() 失败的原因是:".socket_strerror($ret)." "; } if(($ret = socket_listen($sock,4)) < 0) { echo "socket_listen() 失败的原因是:".socket_strerror($ret)." "; } $count = 0; do { if (($msgsock = socket_accept($sock)) < 0) { echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . " "; break; } else { //发到客户端 $msg ="测试成功! "; socket_write($msgsock, $msg, strlen($msg)); echo "测试成功了啊 "; $buf = socket_read($msgsock,8192); $talkback = "收到的信息:$buf "; echo $talkback; if(++$count >= 5){ break; }; } //echo $buf; socket_close($msgsock); } while (true); socket_close($sock); ?>
    <?php
    error_reporting(E_ALL);
    set_time_limit(0);
    echo "<h2>TCP/IP Connection</h2>
    ";
    
    $port = 1935;
    $ip = "127.0.0.1";
    
    /*
     +-------------------------------
     *    @socket连接整个过程
     +-------------------------------
     *    @socket_create
     *    @socket_connect
     *    @socket_write
     *    @socket_read
     *    @socket_close
     +--------------------------------
     */
    
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket < 0) {
        echo "socket_create() failed: reason: " . socket_strerror($socket) . "
    ";
    }else {
        echo "OK.
    ";
    }
    
    echo "试图连接 '$ip' 端口 '$port'...
    ";
    $result = socket_connect($socket, $ip, $port);
    if ($result < 0) {
        echo "socket_connect() failed.
    Reason: ($result) " . socket_strerror($result) . "
    ";
    }else {
        echo "连接OK
    ";
    }
    
    $in = "Ho
    ";
    $in .= "first blood
    ";
    $out = '';
    
    if(!socket_write($socket, $in, strlen($in))) {
        echo "socket_write() failed: reason: " . socket_strerror($socket) . "
    ";
    }else {
        echo "发送到服务器信息成功!
    ";
        echo "发送的内容为:<font color='red'>$in</font> <br>";
    }
    
    while($out = socket_read($socket, 8192)) {
        echo "接收服务器回传信息成功!
    ";
        echo "接受的内容为:",$out;
    }
    
    
    echo "关闭SOCKET...
    ";
    socket_close($socket);
    echo "关闭OK
    ";
    ?>

    server.php需要在cli模式下运行,后续还有更多例子添加

  • 相关阅读:
    v​s​快​捷​键
    sequelize 基本操作
    服务器重启,自动重启httpd
    svn使用方法以及使用教程
    非常全的VsCode快捷键
    原生JS forEach()和map()遍历的区别以及兼容写法
    JS中 map, filter, some, every, forEach, for in, for of 用法总结
    map的使用
    Window和Mac下端口占用情况及处理方式
    vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
  • 原文地址:https://www.cnblogs.com/zx-admin/p/4380969.html
Copyright © 2011-2022 走看看