Сокет PHP висит на fgets - PullRequest
       22

Сокет PHP висит на fgets

2 голосов
/ 27 апреля 2011

У меня есть серверное и клиентское приложение в JAVA, что работает с этим сервером.На первый взгляд, проблем нет - JAVA использует socket.getInputStream() для получения данных и socket.getOutputStream() для отправки данных.

Мне нужно написать тот же клиент на PHP.Все примеры из руководств мне не помогли.Я могу успешно подключиться к серверу, но когда я пытаюсь что-то прочитать - страница зависает.Например:

$fp = stream_socket_client($addr, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, $data);
    while (!feof($fp)) {
        var_dump(fgets($fp, 1024));
    }
    fclose($fp);
}

Этот код зависает даже без времени.

Что может быть не так?

1 Ответ

0 голосов
/ 27 апреля 2011

Ваш сервер действительно отправляет байты?

fgets($fp, 1024)

возвращает, если выполняется одно из следующих условий:

- EOF или новая строка получены

- 1024-1 байт считано

или дальняя сторона закрыла соединение .

Если эти условия не выполняются, вызов блокируется.

Как насчет замены 1024 на меньшее число или использования fgetc ()?

...