首页|操作系统|软件开发|网页制作|媒体动画|数据库|ASP教程|ASP.NET教程|PHP教程|JSP教程|XML教程|建站资料|软件学院|行业资讯|平面设计|网络安全|晒IT论坛|IT人才
  位置: 晒IT >> PHP教程 >> PHP提高教程 >> 正文
 
 
PHP的Socket函数参考
PHP的Socket函数参考
 
 
这些Socket函数直接跟互联网的协议进行发送信息。相对于fopensock的流来讲,他们操作在一个比较底层的级别。通常,他们都是对C函数进行封装,并且名称都类似。如果你有使用C进行socket编程的经验,那么使用这些函数将是非常熟练的。我们这里不讨论特别详细的socket编程。
使用这些函数能够解决高层级别函数所不能解决的难题。使用这些函数能够实现类似fopen的功能,你也许有很多方法来实现socket的功能,比如在PHP中使用CLI(Command-line Interface)来实现的Internet守护进程。
resource socket_accept(resource socket)
在你的脚本服务器端中,使用socket_accept接受一个进入的连接。你必须首先产生一个socket,绑定它到一个名字,并且设置它监听一个端口。在块模式中,socket_accept将产生一个唯一接受后的连接。在非块模式中,它没有建立连接则返回false。另外,当你有了一个新的socket资源后就能够进行读写操作。
下面我们将示范一个简单的回显服务器端。它运行在CLI(命令行)下面,它在12345端口等待客户端的连接。
socket_accept
<?php
   set_time_limit(0);
    //create the socket
    if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        print("Couldn't create socket: " . socket_strerror(socket_last_error()) . "\n");
    }
    //bind it to the given address and port
    if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0)
    {
        print("Couldn't bind socket: " . socket_strerror(socket_last_error()) . "\n");
    }
    if(($error = socket_listen($socket, 5)) < 0)
    {
        print("Couldn't list on socket: " .
            socket_strerror(socket_last_error()) . "\n");
    }
    while(TRUE)
    {
        //wait for connection
        if(($accept = socket_accept($socket)) < 0)
        {
            print("Error while reading: " . socket_strerror($message) . "\n");
            break;
        }
        //send welcome message
        socket_write($accept, "Connection accepted\n");
        print(date('Y-m-d H:i:s') . " STATUS: Connection accepted\n");
        ob_flush();
        while(TRUE)
        {
            //read line from client
            if(FALSE === ($line = socket_read($accept, 1024)))
            {
                print("Couldn't read from socket: " .
                    socket_strerror(socket_last_error()) . "\n");
                break 2;
            }
            if(!@socket_write($accept, "ECHO: $line"))
            {
                print(date('Y-m-d H:i:s') . " STATUS: Connection interrupted\n");
                break;
            }
            print(date('Y-m-d H:i:s') . " READ: $line");
            ob_flush();
        }
        socket_close($accept);
    }
?>

bool socket_bind(resource socket, string address, integer port)
这个socket_bind()把一个socket资源绑定在一个地址上。这个socket必须由socket_create()函数返回的一个资源。这个地址必须是一个IP地址或者是一个保存Unix socket的路径。如果是运行在Internet上的socket,你还必须提供一个端口。
socket_clear_error(resource socket)
这个函数能够清除制定socket的错误,如果没有指定参数,那么将清除所有socket的错误。
socket_close(resource socket)
socket_close函数关闭一个socket并且清除该socket所占用的内存资源。
boolean socket_connect(resource socket, string address, integer port)
这个函数创建一个客户端到一个端口或者socket的连接。你必须提供一个由socket_create产生的socket。这个address参数必须到一个socket的路径或者是一个IP地址。如果是后者,还必须跟一个数字的端口号。
下面例子演示了使用UDP协议的连接到游戏服务器然后获取信息的过程。
socket_connect
<?php
    //create UDP socket
    if(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0)
    {
        print("Couldn't create socket: " .
            socket_strerror(socket_last_error()) . "\n");
    }
[1] [2] [3] [4] [5] [6]  下一页
  • 上一篇: header()函数使用说明
  • 下一篇: PHP和Socket
  •  告诉好友  打印此文 关闭窗口 返回顶部
     
    热点文章
     
     
    推荐文章
     
     
    相关文章

    | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 诚聘英才 |
    Copyright© 2008 ShaiIT.Com .All Rights Reserved
    下载alexa工具,提升您的网站排名