初学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就会被关闭,然后退出了。要怎样修改呢?

解决方案 »

  1.   

    client端都发出了什么?
    检查server端退出时的状态初步测试:服务器端有
    socket_read() failed: reason: 函数不正确。
    信息
      

  2.   

    client端都发出了什么?
    --------------------------
    不好意思,少copy了一句。$msg = "i'm client.";
    检查server端退出时的状态
    --------------------------
    请问该如何检查呢?我这边看到的服务器段的信息和你说的一样的。