1

現在、クライアント/サーバー アプリケーションの公開部分として使用される PHP スクリプトを開発しようとしています。ワンタイム トークンでユーザーを認証するには、php スクリプトを使用する必要があります。

アプリケーションの他の部分は、他のアプリケーションが接続するための telnet ソケットを提供する Java プログラムです。認証は、この telnet 接続を介して行われます。

Java 部分はすでに動作していますが、PHP 部分にはまだ大きな問題があります。

php で、Java プログラムの telnet ポートへの接続を開き、これまでのところ動作しています。接続が初期化されると、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が待機してから関数を実行すると仮定します。

ループの前にデータを送信するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

0

問題はおそらく、データ文字列の最後に を送信する必要があるため\nです。これにより、telnet サーバーは、データの完全なシーケンスを送信したことを認識します。それ以外の場合は、さらに入力を待っている可能性があります。

試す:

$data = $p_ip." ".$p_name." ".$p_token . "\n";
于 2015-09-17T17:17:37.817 に答える