php socket flash通信问题

时间:2022-02-09 13:43:35
<?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 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


希望高手指教。。我很着急。。。在此先谢过各位朋友。。

17 个解决方案

#1


该回复于2009-06-05 11:33:44被版主删除

#2


是。。。现在暂时不考虑flash

#3


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

#4


没人回?自己顶!

#5


你那个端口已经被使用了呢,试着从手册里面找个例子看看吧!

#6


server.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); 



确定端口没有被占。。。。。。。。。。。。。。。。。。。。。。。。。。。。
大家帮看看啊。。。不知道这个服务端的程序是不是可以直接运行???比如直接运行server.php????还是需要在命令提示符下运行???本人用的是phpnow。。。在windows平台下。。

#7


还是没有回帖啊。。。
自己顶啊。。。

#8


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

#9


帮你顶!!!

#10


帮你顶上去

#11


命令行运行——就OK了程序应该没问题,手册上抄的吧

#12


关键是怎么用命令行执行?????????????请说明白一点好吗???谢谢

#13


关键是怎么用命令行执行?????????????请说明白一点好吗???谢谢!!!
本人是新手。。。不懂。。希望内给出代码?????

#14


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

#15


刚才测试了一下你的代码,没有发现你说的问题。
可能是你的环境有问题,比如: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); 怎么可能超时呢?

#16



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

#17


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

#1


该回复于2009-06-05 11:33:44被版主删除

#2


是。。。现在暂时不考虑flash

#3


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

#4


没人回?自己顶!

#5


你那个端口已经被使用了呢,试着从手册里面找个例子看看吧!

#6


server.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); 



确定端口没有被占。。。。。。。。。。。。。。。。。。。。。。。。。。。。
大家帮看看啊。。。不知道这个服务端的程序是不是可以直接运行???比如直接运行server.php????还是需要在命令提示符下运行???本人用的是phpnow。。。在windows平台下。。

#7


还是没有回帖啊。。。
自己顶啊。。。

#8


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

#9


帮你顶!!!

#10


帮你顶上去

#11


命令行运行——就OK了程序应该没问题,手册上抄的吧

#12


关键是怎么用命令行执行?????????????请说明白一点好吗???谢谢

#13


关键是怎么用命令行执行?????????????请说明白一点好吗???谢谢!!!
本人是新手。。。不懂。。希望内给出代码?????

#14


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

#15


刚才测试了一下你的代码,没有发现你说的问题。
可能是你的环境有问题,比如: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); 怎么可能超时呢?

#16



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

#17


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