初学php,还请各位大虾不吝指教。想试验php中的socket通信,从网上找了些代码来。
server代码如下:
<?php
/* 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 = 2345;if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 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 = "Welcome to the PHP Test Server. " .
"To quit, type 'quit'. To shut down the server type 'shutdown'.";
socket_write($msgsock, $msg, strlen($msg)); $buffer = '';
do {
if (FALSE == ($buf = socket_read ($msgsock, 2048))) {
echo "socket_read() failed: reason: " . socket_strerror ($ret) . "\n";
break 2;
}
$buffer = $buffer.$buf;
if (!$buf = trim ($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
$talkback = "socket server will be closed immediately";
socket_write ($msgsock, $talkback, strlen ($talkback));
socket_close ($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\t";
socket_write ($msgsock, $talkback, strlen ($talkback));
} while (true);
socket_close ($msgsock);
} while (true);socket_close ($sock);
?>client如下:
<?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$result = socket_connect($socket,'127.0.0.1','2345');
socket_write($socket,$msg,strlen($msg));
$result = socket_read($socket,2048);
$head = "Location:http://127.0.0.1:88/helloworld.php?recv=$result";
echo($head);
// header($head);
?>不知道为什么,启动server后,执行一次client端,server那边的socket就会被关闭,然后退出了。要怎样修改呢?
server代码如下:
<?php
/* 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 = 2345;if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 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 = "Welcome to the PHP Test Server. " .
"To quit, type 'quit'. To shut down the server type 'shutdown'.";
socket_write($msgsock, $msg, strlen($msg)); $buffer = '';
do {
if (FALSE == ($buf = socket_read ($msgsock, 2048))) {
echo "socket_read() failed: reason: " . socket_strerror ($ret) . "\n";
break 2;
}
$buffer = $buffer.$buf;
if (!$buf = trim ($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
$talkback = "socket server will be closed immediately";
socket_write ($msgsock, $talkback, strlen ($talkback));
socket_close ($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\t";
socket_write ($msgsock, $talkback, strlen ($talkback));
} while (true);
socket_close ($msgsock);
} while (true);socket_close ($sock);
?>client如下:
<?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$result = socket_connect($socket,'127.0.0.1','2345');
socket_write($socket,$msg,strlen($msg));
$result = socket_read($socket,2048);
$head = "Location:http://127.0.0.1:88/helloworld.php?recv=$result";
echo($head);
// header($head);
?>不知道为什么,启动server后,执行一次client端,server那边的socket就会被关闭,然后退出了。要怎样修改呢?
检查server端退出时的状态初步测试:服务器端有
socket_read() failed: reason: 函数不正确。
信息
--------------------------
不好意思,少copy了一句。$msg = "i'm client.";
检查server端退出时的状态
--------------------------
请问该如何检查呢?我这边看到的服务器段的信息和你说的一样的。