PHP: подключение: сохранить данные о состоянии чтения сокетов

Попытка записать данные в сокет и прочитать ответ.

$packet = "GET /get-database HTTP/1.1\r\n"; $packet .= "Host: 192.168.3.136:3689\r\n"; //$packet .= "Accept-Encoding: gzip\r\n"; $packet .= "Viewer-Only-Client: 1\r\n"; $packet .= "Connection: keep-alive\r\n\r\n"; socket_write($socket, $packet, strlen($packet)); do{ $buf = ""; $buf = socket_read($socket, 4096); $data .= $buf; }while($buf != ""); echo "$data\r\n\r\n"; 

Если я установил соединение для close то он работает, и я могу прочитать ответ. Проблема в том, что после того, как я прочитал данные, мне нужно записать обратно в сокет. Ответ содержит идентификатор, который мне нужно отправить обратно для проверки. Если я пишу на сервер в двух отдельных сокетах, он отклоняет сообщение проверки. Поэтому я могу только предположить, что мне нужно публиковать сообщения на одном и том же «открытом соединении» или «сеансе».

Есть предположения?

Я хотел бы выяснить, почему я не могу прочитать из сокета с Connection: keep-alive

####### РЕДАКТИРОВАТЬ

На этом было небольшое развитие. Я пытаюсь сделать это очень простым, чтобы я мог определить проблему:

Сейчас мой код выглядит так:

 $fp = pfsockopen("192.168.3.136", "3689"); $content = "GET /login?id=a90347 HTTP/1.1\r\n"; $content .= "Connection: keep-alive\r\n\r\n"; fputs($fp, $content); while (!feof($fp)) { echo fgets($fp, 8192); } 

Что происходит, так как, как только я делаю свои функции, я получаю заголовок ответа с сервера, который выглядит так:

 HTTP/1.1 200 OK Date: Fri, 05 Mar 2010 22:05:47 GMT RIPT-Server: iTunesLib/3.0.2 (Mac OS X) Content-Type: application/x-dmap-tagged Content-Length: 32 

И тогда мой курсор просто сидит там. Через какое-то время от 15 секунд до минуты я иногда получаю контент, но я все еще застрял в цикле while.

Кто-нибудь знает, если после отправки сервером заголовка ответа, если я должен что-то отправить ему, чтобы сообщить ему, что я готов к контенту?

Опять же, я не думаю, что это так, поскольку, когда я просматриваю пакеты в сети, я вижу весь ответ. Это и тот факт, что я иногда получаю содержание ответа. Это похоже на то, что PHP не справляется с этим, или я просто ушел с базы.

Еще нужна помощь ….. 🙁

Рабочий код

 $fp = pfsockopen("192.168.3.136", "3689"); $header = "GET /login?id=5648349 HTTP/1.1\r\n"; $header .= "Connection: keep-alive\r\n\r\n"; fputs($fp, $header); $headers = array(); while(true){ $line = fgets($fp, 8192); if($line == "\r\n"){ break; } $line_parts = explode(': ',$line); echo $line_parts[1]."\r\n"; $headers[$line_parts[0]] = $line_parts[1]; } $content = fread($fp,intval($headers['Content-Length'])); echo $content; в $fp = pfsockopen("192.168.3.136", "3689"); $header = "GET /login?id=5648349 HTTP/1.1\r\n"; $header .= "Connection: keep-alive\r\n\r\n"; fputs($fp, $header); $headers = array(); while(true){ $line = fgets($fp, 8192); if($line == "\r\n"){ break; } $line_parts = explode(': ',$line); echo $line_parts[1]."\r\n"; $headers[$line_parts[0]] = $line_parts[1]; } $content = fread($fp,intval($headers['Content-Length'])); echo $content; 

Теперь мне нужно будет опасаться теста «\ r \ n», поскольку я уверен, что возможно, что некоторые ответы могут отправлять только «\ n» после заголовка.