2014-10-02 2 views
0

소켓 프로그래밍을 사용하여 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

답변

0

최소한 오류 검사를 수행해야합니다. 아마도 이것은 도움이 될 것입니다 :

$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); 
} 
관련 문제