我正在实现一个简单的HTTP客户端,它只连接到Web服务器并获取其默认主页.在这里,它很好用:
using System;
using System.Net.Sockets;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TcpClient tc = new TcpClient();
tc.Connect("www.google.com", 80);
using (NetworkStream ns = tc.GetStream())
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(ns);
System.IO.StreamReader sr = new System.IO.StreamReader(ns);
string req = "";
req += "GET / HTTP/1.0\r\n";
req += "Host: www.google.com\r\n";
req += "\r\n";
sw.Write(req);
sw.Flush();
Console.WriteLine("[reading...]");
Console.WriteLine(sr.ReadToEnd());
}
tc.Close();
Console.WriteLine("[done!]");
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我从上面的代码中删除下面的行时,程序会在sr.ReadToEnd上阻塞.
req += "Host: www.google.com\r\n";
Run Code Online (Sandbox Code Playgroud)
我甚至用sr.Read替换了 …
我可以在Perl中设置一个telnet连接没有问题,刚刚发现了Curses,我想知道我是否可以一起使用这两个连接来从telnet会话中获取输出.
我可以使用下面的简单脚本在行,列的基础上查看STDOUT的内容:
use Curses;
my $win = new Curses;
$win->addstr(10, 10, 'foo');
$win->refresh;
my $thischar=$win->inch(10,10);
print "Char $thischar\n";
Run Code Online (Sandbox Code Playgroud)
使用下面我可以打开一个telnet连接并发送\ receive命令没有问题:
use net::telnet;
my $telnet = new Net::Telnet (Timeout => 9999,);
$telnet->open($ipaddress) or die "telnet open failed\n";
$telnet->login($user,$pass);
my $output = $telnet->cmd("command string");
Run Code Online (Sandbox Code Playgroud)
...但我真正想做的是获取telnet响应(包括终端控制字符),然后使用curses在行/列上搜索.有谁知道我可以将两者连接在一起的方式?在我看来,curses只能在STDOUT上运行
据我所知,Telnet是一种协议,与HTTP一样多.我有这样的想法,即在建立初始TCP连接之后,Telnet客户端会将一些特定于telnet的代码发送到另一端的服务器,在这种情况下是HTTP服务器.但由于HTTP服务器不了解Telnet特定代码,它应该抛出错误或丢弃连接等.但实际上,如果我们输入正确的HTTP标头并发送它们,我们可以telnet到HTTP服务器并获取页面.怎么会这样?维基百科条目真的没有帮助我理解这个具体点.(http://en.wikipedia.org/wiki/Telnet#Telnet_data)
我无法使用该命令telnet localhost 5554连接Android模拟器.总是得到这个错误:
连接到localhost ...无法打开与主机的连接,在端口5554上:连接失败
我甚至将所有端口设置为允许Windows防火墙中的入站和出站规则中的连接.
我正在运行Windows 7.
我一直在尝试创建一个期望脚本,通过telnet自动登录我的设备
如果expect命令没有多种可能性,则脚本工作正常,登录到设备.
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn telnet $ip $port
expect "'^]'." sleep .1;
send "\r";
sleep .1;
expect "login:"
send "$user\r"
expect "Password:"
send "$password\r";
interact
Run Code Online (Sandbox Code Playgroud)
上面的脚本工作正常,并在我传递正确的参数时成功登录.但是,一旦我向expect命令添加了额外的分支(用于错误处理),脚本就会在提示符下卡住.login:一段时间后它会打印脚本错误
任何帮助?下面的错误脚本.
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn telnet $ip $port …Run Code Online (Sandbox Code Playgroud) 这是我试过的
telnet www.google.com 80
Get HTTP/1.1 Host:www.google.com
Run Code Online (Sandbox Code Playgroud)
这是我收到的东西
HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 925
Date: Sat, 24 Nov 2012 19:37:42 GMT
Server: GFE/2.0
Run Code Online (Sandbox Code Playgroud)
我该如何工作?我尝试使用telnet访问www.google.com
看看以下帖子:
我尝试过同样的事情,但不断收到错误请求!(400!)我正在使用Windows 8 PRO机器.我只是想尝试一些使用Telnet的东西,但只要我不断得到这个400错误,我就无法真正实现!
我所做的就是以下内容:
o www.google.com 80 (PRESSING ENTER TWICE!!!)
GET / HTTP/1.1 (ENTER)
Host: www.google.com (PRESSING ENTER TWICE!!!)
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏!

我想写一个远程控制台,像telnet服务器一样工作.用户可以使用telnet登录服务器,然后编写一些命令来完成一些工作.
一个很好的例子是路由器操作系统的控制台.我现在困惑的是,我可以接受用户的输入,做一些然后打印一些文本,但我想使用ncurses使控制台具有更多功能(例如"cmd auto-complete",语法颜色...... ),那我该怎么办呢?因为控制台在用户端,如果服务器调用ncurses API,它只会改变服务器上的东西......
也许这是一个愚蠢的问题,但我真的是新手.任何建议表示赞赏.
对不起,如果我的问题很愚蠢!
我正在使用Delphi XE4,现在我正在努力IdTelnet.但我遇到了OnDataAvailable事件的问题.看看这张图:

所以我无法使用OnDataAvailableEvent.
这是因为Delphi XE4吗?我该如何解决?
谢谢
我尝试编写Swift片段来向Telnet发送命令,但我需要先登录.
在OSX上我生成了一个Telnet服务:launchctl load -F /System/Library/LaunchDaemons/telnet.plist.之后我能够从其他计算机连接到IP:XXX.XXX.X.XXX端口23.
例如,从Windows 7:
telnet XXX.XXX.X.XXX 23
.....
Darwin/BSD (fess.local) (ttys009)
login: snaggs
Password:xxxxxx
snaggs:~ lur$
Run Code Online (Sandbox Code Playgroud)
在命令行中,Telnet要求我输入用户名和密码.之后我可以运行任何Linux命令.到现在为止还挺好.
我为Android编写了Telnet模块,因此OSX Telnet服务正常工作.这意味着我看到login:并password:输出所以我能够处理它.
现在我坚持使用iOS Swift,我用Google搜索并找到了非常好的解决方案,应该适用于我的情况:
所以我写了我的家庭作品:
class TelnetClient : NSObject, NSStreamDelegate{
private var inputStream: NSInputStream!
private var outputStream: NSOutputStream!
func initNetworkCommunication(){
let host : CFString = "XXX.XXX.X.XXX"
let port : UInt32 = 23
var readstream : Unmanaged<CFReadStream>?
var writestream : Unmanaged<CFWriteStream>?
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host, port, &readstream, …Run Code Online (Sandbox Code Playgroud)