不用管的
读到eof就会自动结束的

解决方案 »

  1.   

    用socket_read怎样判断读到eof?
    或者用什么别的方法读eof?
    socket_recv的flags没有说明,不知道怎么用
      

  2.   

    用fsocket_open打开用fread读的时候就是这样
    这个完全是自动的,不用你去操心的
      

  3.   

    while ($ret1 = socket_read($socket,2048, PHP_BINARY_READ))
    {
        $ret2 .= $ret1;
    }socket_read() returns a zero length string ("") when there is no more data to read. 
      

  4.   

    to syre(神仙) 
    我换成使用fsockopen的代码:
    ......
    $socket = fsockopen($ip, $port,&$errno, &$errstr, $TimeOut);
    if(!$socket) 
    exit();  
    else 

    fwrite($socket, $command, strlen ($command));
    $ret = "";
    while (!feof($socket)) 
    {
    $tmp = fread($socket, 1024); 
    $ret .= $tmp;
    }
    fclose($socket);
    }
    ......
    但是客户端程序还是会卡死,只有等到TimeOut才会执行下去.to Meteorlet(www.imsorry.com.cn/blog)
    客户端程序同样会卡执行不下去,循环执行到第三次的时候要等TimeOut才会返回空字符串.
      

  5.   

    你的那个“c写的socket服务器端”可能没有按照规范书写
    也就可能得不到预期的结束符:false或""
      

  6.   

    我自己写了一个测试用的服务器端,接收到PHP的socket请求时,返回下面的结构:
    struct a
    {
    char b1[5];
    char b2[5];
    char b3[4];
    };//建立socket部分代码省略,我只列出返回结构赋值部分
    struct a ret;
    strcpy(ret.b1,"mmmm");
    strcpy(ret.b2,"9999");
    strcpy(ret.b3,"123");send(skt, &ret, sizeof(struct a), 0);这个应该很简单的,应该没有不符合规范吧.但是在PHP用上面两位的方法就是会卡,不知道为什么.