telnet — PHP fputs & quot; ждет & quot; до конца сценария

В настоящее время я пытаюсь разработать сценарий PHP, используемый в качестве общедоступной части клиент-серверного приложения. Сценарий php должен использоваться для аутентификации пользователей с помощью одноразового токена.

Другая часть приложения — это Java-программа, которая предлагает сокет telnet для подключения других приложений. Аутентификация осуществляется через это соединение telnet.

Java-часть уже работает, но у меня все еще есть огромная проблема с PHP-частью.

В php я открыл соединение с портом telnet программы java, которая работает до сих пор. После того, как соединение инициализировано, java-программа ожидает ввода от PHP-скрипта для аутентификации пользователя.
После того как процесс аутентификации завершен, он возвращает строку в скрипт PHP (или любую другую программу, подключенную к его серверу telnet), которую должен вывести скрипт PHP.

Прежде чем я объясню свою проблему, это часть PHP-скрипта, где происходит фактическое общение:

$tnconn = fsockopen("localhost", 53135, $errno, $errstr, 2);

if(!$tnconn) {
echo "SERVER_UNAVAILABLE";
die();
} else {
$data = $p_ip." ".$p_name." ".$p_token;
fputs($tnconn, $data);

while (true) {
if(($telnet_response = fgets($tnconn)) == false) {
break;
}
}
}

echo $telnet_response;

Кажется, что fputs() Оператор выполняется после цикла, даже если это должно произойти до его запуска — иначе приложение Java не может получить данные, которые передаются в сценарий php, но это необходимо для аутентификации пользователей.

Сразу после получения данных сервер telnet выводит строку, чтобы указать, была ли аутентификация успешной или нет.

Я попытался временно удалить цикл, и данные были успешно переданы с fputs() поэтому я предполагаю, что php ждет завершения всего скрипта и затем выполняет функцию.

Как я могу заставить его отправлять данные перед циклом?

Заранее спасибо.

1

Решение

Проблема, вероятно, в том, что вам нужно отправить \n в конце вашей строки данных, чтобы сервер telnet знал, что вы отправили полную последовательность данных. В противном случае он, скорее всего, сидит в ожидании большего ввода.

Пытаться:

$data = $p_ip." ".$p_name." ".$p_token . "\n";
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]