PHP fputs"等待"直到脚本结束

时间:2015-09-17 16:53:55

标签: php telnet fputs

目前我正在尝试开发一个PHP脚本,用作客户端/服务器应用程序的公共可用部分。应使用php脚本通过一次性令牌对用户进行身份验证。

该应用程序的另一部分是一个java程序,它为其他连接的应用程序提供了一个telnet套接字。身份验证通过此telnet连接完成。

java部分已经在运行了 - 但是我的PHP部分仍然存在很大的问题。

在php中,我已经打开了与java程序的telnet端口的连接,该程序到目前为止一直有效。初始化连接后,java程序将等待PHP脚本的输入,以便对用户进行身份验证 身份验证过程完成后,它会将一个String返回给PHP脚本应输出的PHP脚本(或连接到其telnet服务器的任何其他程序)。

在我解释我的问题之前,这是实际通信发生的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服务器将输出String以指示身份验证是否成功。

我尝试暂时删除循环并且数据已成功传递fputs()所以我假设php等待整个脚本完成然后执行该函数。

如何让它在循环之前发送数据?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题可能是您需要在数据字符串末尾发送\n,以便telnet服务器知道您已发送完整的数据序列。否则,它很可能坐在那里等待更多的输入。

尝试:

$data = $p_ip." ".$p_name." ".$p_token . "\n";
相关问题