<?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
希望高手指教。。我很着急在此先谢过各位朋友。。
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
希望高手指教。。我很着急在此先谢过各位朋友。。
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平台下。。
我在命令行模式下运行了,同样出现以上错误提示!!!
可能是你的环境有问题,比如: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); 怎么可能超时呢?
现在上边的问题是暂时解决了
我的socket扩展是打开的,但是为什么我在命令行里边运行的时候却说socket_create()是未定义的函数?还有没有其他的可以建立socket连接的函数?