<?php
error_reporting(E_ALL);/* Allow the script to hang around waiting for connections. */
set_time_limit(0);/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();$address = '127.0.0.1';
$port = 10000;if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n";
}if (($ret = socket_bind($sock, $address, $port)) < 0) {
    echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n";
}if (($ret = socket_listen($sock, 5)) < 0) {
    echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n";
}do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
        "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
} while (true);socket_close($sock);
?>这是我从网上找的socket服务端的代码不知道有没有问题。。从网上找的代码大多都一样。。但一运行就出错了。
要么是cpu占用内存100%,要不就出错:出错的提示是:
Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 in D:\phpnow\htdocs\test\server.php on line 12Warning: socket_listen() [function.socket-listen]: unable to listen on socket [0]: 提供了一个无效的参数。 in D:\phpnow\htdocs\test\server.php on line 16
Wainting fro a connection: 
Fatal error: Maximum execution time of 30 seconds exceeded in D:\phpnow\htdocs\test\server.php on line 28
希望高手指教。。我很着急在此先谢过各位朋友。。

解决方案 »

  1.   

    现在暂时不考虑flash的问题,希望高手赐教!
      

  2.   

    server.phperror_reporting(E_ALL); /* Allow the script to hang around waiting for connections. */ 
    set_time_limit(0); /* Turn on implicit output flushing so we see what we're getting 
    * as it comes in. */ 
    ob_implicit_flush(); $address = '127.0.0.1'; 
    $port = 10000; if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { 
        echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n"; 
    } if (($ret = socket_bind($sock, $address, $port)) < 0) { 
        echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n"; 
    } if (($ret = socket_listen($sock, 5)) < 0) { 
        echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n"; 
    } do { 
        if (($msgsock = socket_accept($sock)) < 0) { 
            echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n"; 
            break; 
        } 
        /* Send instructions. */ 
        $msg = "\nWelcome to the PHP Test Server. \n" . 
            "To quit, type 'quit'. To shut down the server type 'shutdown'.\n"; 
        socket_write($msgsock, $msg, strlen($msg));     do { 
            if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) { 
                echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n"; 
                break 2; 
            } 
            if (!$buf = trim($buf)) { 
                continue; 
            } 
            if ($buf == 'quit') { 
                break; 
            } 
            if ($buf == 'shutdown') { 
                socket_close($msgsock); 
                break 2; 
            } 
            $talkback = "PHP: You said '$buf'.\n"; 
            socket_write($msgsock, $talkback, strlen($talkback)); 
            echo "$buf\n"; 
        } while (true); 
        socket_close($msgsock); 
    } while (true); socket_close($sock); 确定端口没有被占。
    大家帮看看啊不知道这个服务端的程序是不是可以直接运行???比如直接运行server.php????还是需要在命令提示符下运行???本人用的是phpnow在windows平台下。。
      

  3.   

    命令行下 php server.php 可以直接運行PHP文件
      

  4.   

    Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次
    我在命令行模式下运行了,同样出现以上错误提示!!!
      

  5.   

    刚才测试了一下你的代码,没有发现你说的问题。
    可能是你的环境有问题,比如:php没有配置好;WEB服务器设置问题;防火墙问题。另外,你帖出的代码是真实的吗?为什么错误提示中,出错行不对?1、<?php 
    2、error_reporting(E_ALL); 
    3、
    4、/* Allow the script to hang around waiting for connections. */ 
    5、set_time_limit(0); 
    6、
    7、/* Turn on implicit output flushing so we see what we're getting 
    8、* as it comes in. */ 
    9、ob_implicit_flush(); 
    10、
    11、$address = '127.0.0.1'; 
    12、$port = 10000; 
    13、
    14、if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { 
    15、    echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n"; 
    16、} 
    17、
    18、if (($ret = socket_bind($sock, $address, $port)) < 0) { 
    19、    echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n"; 
    20、} 
    21、
    22、if (($ret = socket_listen($sock, 5)) < 0) { 
    23、    echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n"; 
    24、} 
    25、
    26、do { 
    27、    if (($msgsock = socket_accept($sock)) < 0) { 
    28、        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n"; 
    29、        break; 
    30、    } 
    31、    /* Send instructions. */ 
    。。 出错的提示是: 
    Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 in D:\phpnow\htdocs\test\server.php on line 12 Warning: socket_listen() [function.socket-listen]: unable to listen on socket [0]: 提供了一个无效的参数。 in D:\phpnow\htdocs\test\server.php on line 16 
    Wainting fro a connection: 
    Fatal error: Maximum execution time of 30 seconds exceeded in D:\phpnow\htdocs\test\server.php on line 28 第5行就有 set_time_limit(0); 怎么可能超时呢?
      

  6.   


    现在上边的问题是暂时解决了
    我的socket扩展是打开的,但是为什么我在命令行里边运行的时候却说socket_create()是未定义的函数?还有没有其他的可以建立socket连接的函数?
      

  7.   

    如果你的php.ini配置在 c:\windows下  你拷贝一份到 php.exe 目录下面就可以了