套接字编程:socket_read,fgets无法获得响应

问题描述:

我想从使用套接字编程的URL获得响应,但没有任何工作正常。我正在使用PHP,并且我正在与开发人员告知我需要打开一个套接字,发送一个请求,然后我应该得到一个JSON响应。 $message是需要发送以便接收响应的字符串。套接字编程:socket_read,fgets无法获得响应

这是我到目前为止已经试过......

$message = "api\tjson\tget\trooms\n"; 
$response = fsockopen("142.4.xxx.xxx", 5678); 
fputs($response, $message); 
fgets($response, 2048); 
$data = json_decode($response, true); 

然后我去解析JSON响应。

我也试过,

$message = "api\tjson\tget\trooms\n"; 
$response = fsockopen("142.4.xxx.xxx", 5678); 
fputs($response, $message); 
socket_read($response, 2048, PHP_NORMAL_READ); 
$data = json_decode($response, true); 

但后来我得到一个错误,指出socket_read不正确的资源。任何帮助,将不胜感激。

+0

[使用流套接字。](http://www.christophh.net/2012/07/24/php-socket-programming/)你会发现它更容易。 – OneHoopyFrood 2014-10-02 00:58:34

您至少需要进行一些错误检查。也许这会有所帮助:

$message = "api\tjson\tget\trooms\n"; 
$response = fsockopen("142.4.xxx.xxx", 5678, $errno, $errstr, 30); 
if (!$response) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    $out = "POST /script.php HTTP/1.1\r\n"; 
    $out .= "Host: www.webste.com\r\n"; 
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $out .= 'Content-Length: ' . strlen($message) . "\r\n\r\n"; 
    $out .= "Connection: Close\r\n\r\n"; 
    fwrite($response, $out); 
    fwrite($response, $message); 
    while (!feof($response)) { 
     echo fgets($response, 128); 
    } 
    fclose($response); 
}