【问题标题】:php sockets read json array from java serverphp sockets从java服务器读取json数组
【发布时间】:2011-08-26 07:52:00
【问题描述】:

我正在使用 TCP/IP 连接到用 JAVA 编写的服务器。我的应用程序将 json 数组发送到此服务器,并且在某些情况下还需要一些结果,即 json 数组。问题是我可以轻松地通过 tcp 发送 json,但是在读取它时,脚本会永远冻结等待,直到超时。 这是我的代码。

$sock = socket_create(AF_INET, SOCK_STREAM, 0)  //Creating a TCP socket
                or die("error: could not create socket\n");
        $succ = socket_connect($sock, Application_Model_Config::serverHost, Application_Model_Config::serverPort)   //Connecting to to server using that socket
                or die("error: could not connect to host\n");

        socket_write($sock, $send.'\n', strlen($send)+1);

        $response = '';
        while ($resp = socket_read($sock, 1024)) {
            if (!$resp)
                break;
            $response .= $resp;
            if (strpos($resp, "\n") !== false)
                break;
        }

        echo "Server said: {$response}";
    }

$send 是一个编码为 json_encode($array) 的数组。

发送没问题,但当需要接收时,我什么也得不到。

如果可能的话,我不介意使用 jquery(从服务器发送和获取 json 对象)来处理这个问题。我不知道有任何实现这样的实现,但我愿意接受建议......实际上更喜欢它而不是 php。

【问题讨论】:

    标签: java php sockets php-socket


    【解决方案1】:

    在您使用socket_read的模式下,它与recv具有相同的语义:

    如果套接字上没有可用的消息,则接收调用会等待消息到达,除非套接字是非阻塞的(请参阅fcntl(2)),在这种情况下返回值 -1 并且外部变量 errno设置为EAGAIN。接收调用通常会返回任何可用的数据,直到请求的数量,而不是等待收到请求的全部数量。

    因此,如果脚本“永远等待直到超时”,那是因为没有数据可供读取。您可以使用数据包嗅探器确认这一点。

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多