让php中的Telnet程序陷入这样的困境:转义字符是';^]';

让php中的Telnet程序陷入这样的困境:转义字符是';^]';,php,telnet,php-socket,Php,Telnet,Php Socket,我正在尝试创建如下内容: telnet towel.blinkenlights.nl 666 telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 您必须在终端中写入它&它会向您发送一些响应,如果服务器请求,用户也可以发送输入 我找了很多,但还不够。只需以下代码: <?php $IP_ADDR='127.0.0.1'; $PORT='80'; echo "We

我正在尝试创建如下内容:

telnet towel.blinkenlights.nl 666
telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
您必须在终端中写入它&它会向您发送一些响应,如果服务器请求,用户也可以发送输入

我找了很多,但还不够。只需以下代码:

<?php

$IP_ADDR='127.0.0.1';
$PORT='80';
echo "Welcome to LOCALHOST...";
$connection = fsockopen($IP_ADDR, $PORT);

if(!$connection){

echo "No Connection";

}else{

echo "Hello, what's your name?";

}

?>
因此,在与localhost连接后,它不会显示输出,我必须键入任何字符,然后按enter键,然后显示此输出:

g
Welcome to LOCALHOST...Hello, what's your name?Connection closed by foreign host.
那么,我如何避免每次为输出插入字符时出现这种情况呢

请帮帮我。 谢谢

编辑代码:

My Code :

$IP_ADDR='127.0.0.1';
$PORT='80';
$connection = fsockopen($IP_ADDR, $PORT);

if(!$connection){
echo "No Connection";
}else{
$filename = "sampledata.txt";
$somecontent = "Weekend is about to come.";
if (is_writable($filename)) {
    if (!$handle = fopen($filename, 'a')) {
         echo "Cannot open file";
         exit;
    }  
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Cannot write to file";
        exit;
    }

    echo "Success";
    fclose($handle);
} else {
    echo "The file $filename is not writable";
}
}

Output : 
telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
d
Success, wrote (Weekend is about to come.) to file (sampledata.txt)Connection closed by foreign host.

echo
在这里不起作用,因为
echo
将输出放到
STDIO
。您需要使用
fwrite
函数写入套接字,就像对普通系统文件那样

请查看:

您可以使用在PHP脚本中创建服务器。查看PHP文档提供的页面,了解如何在PHP中创建服务器

#!/usr/local/bin/php -q
<?php
error_reporting(E_ALL);

/* Allow the script to hang around waiting for connections. */
set_time_limit(0);

/* Turn on implicit output flushing so we see what we're getting
 * as it comes in. */
ob_implicit_flush();

$address = '192.168.1.53';
$port = 10000;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}

if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

if (socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
        "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));

    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
} while (true);

socket_close($sock);
?>
#/usr/local/bin/php-q

但它仍然显示“转义字符为“^]”。而不是直接显示输出。我编辑了问题并添加了最近的代码。请看一看,帮帮我。ThanksIt有点不清楚如何使用
fsockopen()
调用。您没有使用
$connection
变量执行任何操作。您想用PHP脚本启动服务器(可以通过“telnet”连接),还是想用PHP脚本作为客户端连接到现有的telnet服务器?在您的场景中,什么是服务器,什么是客户端?@Progman让我在这里澄清一下。我想用php实现这一点。像这样的。如果有人键入
telnet subdomain.mydomain.com
它应该连接到它,而不显示
转义字符是“^]”。
显示一个菜单来执行类似于1的操作。登录2。登记册3。像这样退出。我们使用这个
telnet telehack.com
的方式,因此我将拥有自己的基于linux的共享服务器和MySQL数据库来存储数据。或者如果我错了,请指导我如何实现这一点。非常感谢你,我只是第一次访问这个网站,得到了这个例子。但是错误是权限被拒绝了&还有
socket\u bind():无法绑定地址[98]:地址已在使用中
。所以我把我的Apache2端口从80改为2323,这样在1024以上我们就不需要许可,端口就可以使用了。所以请告诉我哪里做错了?我刚刚更改了您上面提供的代码中的以下行:
$address='192.168.1.203'
$port=2323@AndroidDeveloper您不能在同一端口上运行两个应用程序/服务/服务器。当apache在端口80上运行,并且PHP脚本尝试在同一端口上创建服务器时,您将收到此错误消息。您必须为PHP脚本选择一个空闲端口,而不是使用(apache服务器)已经使用的端口。您可以让apache服务器在端口80上运行,并让PHP脚本在任何其他可用端口(如示例中的端口10000)上运行服务器。非常感谢,先生,脚本现在运行正常。但我如何在实际服务器上运行它,而不是端口号10000,如何像这样运行
telnet subdomain.mydomain.com
,所以它将端口23作为默认端口。就像这个示例
telnet tower.blinkenlights.nl
@AndroidDeveloper如果不向apache配置添加其他端口,请将其保留在端口80上。在PHP脚本中使用端口10000并运行它。只要PHP脚本正在运行,您就可以通过telnet ip 10000连接到它。顺便说一句:PHP脚本不需要通过apache执行。如果可能,您可以从CLI运行它,如“php yourfile.php”。通过这种方式,您根本不需要apache服务器就可以从PHP脚本获得服务器。