php作为客户端,通过socket向java写的服务器端发送请求,服务器端能够收到客服端发送的信息,但客户端却收不到服务器端返回的值,要怎么做才能让客户端读取到java返回的信息。
//客户端方法一:
                $sock = fsockopen("udp://127.0.0.1", 8888, $errno, $errstr, 1);
if (!$sock)
{
echo "$errstr ($errno)<br />\n";
}else{
// socket_set_blocking($sock,false);
    fputs($sock, "status");
    while (!feof($sock)) {
        $msg .= fgets($sock, 128);
    }
}

fclose($sock);   方法二:
                $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result =  socket_connect($socket, '127.0.0.1', '8888');
if($result >= 0)
{
                        $command = "status"
                        $isError = socket_write($socket, $command, strlen($command));
if($isError > 0)
{
$msg = socket_read($socket, 100);
   echo $msg;
}
  
}else{
$msg = "socket error!";
}//服务器端
                                SocketAddress address = client.getLocalSocketAddress();
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());

String str=in.readLine();
if(str != null)
{
                                       if(str.equals("status")){
out.println("hello");
}
                                }
                                out.close();
in.close();
client.close();php的

解决方案 »

  1.   

    这贴分多.我再来回一个..
    监听和接收的原理要弄明白, 
    这其中的握手,连接,返回的时间流程,跟程序自身的时间流程并不是一致的. 
    也就是说,你发送了数据,却不知道服务器什么时候会返回你.这是不可控的. 
    并不是PHP中前一条语句发送了数据,下一条语句就能立即读到. 
    可能在下一条语句执行的时间片之前,响应已经过了,也可能下一句执行完了,响应却还未到达. 所以...我想你该知道怎么做了.. 
    这跟用PHP做socket监听是一样的原理.
      

  2.   

    我分别单独用php作服务器端和客户端。单独用java做服务器端和客户端,测试过都没问题,访问都能正常返回。还望高人来帮一把,不胜感激
      

  3.   

    <?php
    $timeout = 10;
    while ($timeout--) {
    //读取 socket sleep(1);
    }
    if ($timeout === 0) {
    echo "超时";
    }
    ?>
      

  4.   

    是xml形式的交互吗
    file_get_contents("php://input");
      

  5.   

    问题有没解决,我们现在要做一个PHP客户端与 C++写的服务器端进行交互
    准备用xml进行交互