Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php套接字从java服务器读取json数组_Java_Php_Sockets_Php Socket - Fatal编程技术网

php套接字从java服务器读取json数组

php套接字从java服务器读取json数组,java,php,sockets,php-socket,Java,Php,Sockets,Php Socket,我正在使用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

我正在使用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。

在您使用的模式中,它的语义与:

如果套接字上没有可用的消息,则接收呼叫将等待消息到达,除非套接字是非阻塞的(请参阅
fcntl(2)
),在这种情况下,返回值-1,并将外部变量
errno
设置为
EAGAIN
。receive calls通常返回所有可用数据,最多返回请求的金额,而不是等待收到请求的全部金额

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