以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]telnet 求助!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=105012)

--  作者:yangguojun
--  发布时间:2017/8/10 10:01:00
--  [求助]telnet 求助!
Dim P As New Process
        P.StartInfo.FileName = "cmd.exe"
        \'这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
        P.StartInfo.UseShellExecute = False
        P.StartInfo.RedirectStandardInput = True
        P.StartInfo.RedirectStandardOutput = True
        P.StartInfo.CreateNoWindow = True
        P.Start()
        P.StandardInput.WriteLine("ping 127.0.0.1") \' 向cmd.exe输入command
        P.StandardInput.WriteLine("exit")
        P.WaitForExit(60000)
        Dim S As String = P.StandardOutput.ReadToEnd() \' 得到cmd.exe的输出
        P.Close()
        output.show(S.Replace(Chr(13), ""))

不知道为什么没有数据, 请老师帮忙改改



--  作者:有点甜
--  发布时间:2017/8/10 10:14:00
--  
Dim P As New Process
P.StartInfo.FileName = "cmd.exe"
P.StartInfo.UseShellExecute = False
P.StartInfo.RedirectStandardInput = True
P.StartInfo.RedirectStandardOutput = True
P.StartInfo.CreateNoWindow = True
P.Start()
P.StandardInput.WriteLine("ping 127.0.0.1") \' 向cmd.exe输入command
P.StandardInput.WriteLine("exit")
\'P.WaitForExit(600)
Dim S As String = P.StandardOutput.ReadToEnd() \' 得到cmd.exe的输出
output.show(S.Replace(Chr(13), ""))

--  作者:yangguojun
--  发布时间:2017/8/10 10:33:00
--  
老师上面的代码可以了,再帮看看下面这段,我在cmd里  测试我的每条代码都没有问题,但是在telnet里  逐条输入得不到结果。


login:cs

password:cs

welcome to cmd

order list:INPUT OUTPUT SENSOR SWITCH REBOOT QUIT

input order:INPUT 0

I1:0.00A        (0.00A ~ 32.00A/35.00A)
U1:219.9V       (0.0V ~ 250.0V/280.0V)
P1:0W
PF1:1.000
E1:0.00kWh

I2:0.00A        (0.00A ~ 32.00A/35.00A)
U2:219.8V       (0.0V ~ 250.0V/280.0V)
P2:0W
PF2:1.000
E2:2.50kWh

I3:0.00A        (0.00A ~ 32.00A/35.00A)
U3:219.9V       (0.0V ~ 250.0V/280.0V)
P3:0W
PF3:1.000
E3:0.49kWh

input order:eXIT

input order:

上面的内容是 cmd里测试的记录,下面是我的代码

Dim iProcess As New Process()
iProcess.StartInfo.FileName = "cmd.exe"
iProcess.StartInfo.UseShellExecute = False
iProcess.StartInfo.RedirectStandardInput = True
iProcess.StartInfo.RedirectStandardOutput = True
iProcess.StartInfo.RedirectStandardError = True
iProcess.StartInfo.CreateNoWindow = False
iProcess.Start()
iProcess.StandardInput.WriteLine("telnet")
iProcess.StandardInput.WriteLine("o 192.168.1.190")
iProcess.StandardInput.WriteLine("cs")
\'iProcess.StandardInput.WriteLine("")
iProcess.StandardInput.WriteLine("cs")
iProcess.StandardInput.WriteLine("input 0")
iProcess.StandardInput.WriteLine("TJ00qw.job")
\'这里是一个ping命令带ip地址参数的,你可以改成telnet命令还有添加参数
iProcess.StandardInput.WriteLine("exit")
\'Label6.Text = iProcess.StandardOutput.ReadToEnd()
output.show(iProcess.StandardOutput.ReadToEnd())



--  作者:yangguojun
--  发布时间:2017/8/10 10:45:00
--  
Microsoft Windows [版本 10.0.10240]
(c) 2015 Microsoft Corporation. All rights reserved.

E:\\销售管理(远程)>telnet

E:\\销售管理(远程)>o 192.168.1.190

E:\\销售管理(远程)>cs

E:\\销售管理(远程)>
E:\\销售管理(远程)>cs

E:\\销售管理(远程)>input 0

E:\\销售管理(远程)>exit

我的代码返回的是上面内容,  没有返回数据

--  作者:有点甜
--  发布时间:2017/8/10 10:52:00
--  

telnet不是这样用的,参考这个做法

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=84487&replyID=585659&skin=1

 


--  作者:yangguojun
--  发布时间:2017/8/10 11:31:00
--  
图片点击可在新窗口打开查看这个例子更加看不懂了
--  作者:有点甜
--  发布时间:2017/8/10 12:12:00
--  

参考

 

Dim data, szData

Dim SmtpServ As New System.Net.Sockets.TcpClient("127.0.0.1", 80)
Dim NetStrm = SmtpServ.GetStream()
Dim RDStrm As New io.StreamReader(SmtpServ.GetStream())
Data = "111222333 " & vbcrlf
szData = System.Text.Encoding.ASCII.GetBytes(Data)
NetStrm.Write(szData, 0, szData.Length)
NetStrm.Flush()
output.show(data)

Data = "aaabbbccc " & vbCRLF
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray())
NetStrm.Write(szData, 0, szData.Length)
netStrm.Flush
output.show(data)
system.threading.thread.sleep(100)

\'查看交互内容
Dim buff(10000) As Byte
netstrm.read(buff,0, buff.length)
msgbox(System.Text.Encoding.ASCII.getString(buff))

\' 关闭连接
NetStrm.Close()
RDStrm.Close()

 


--  作者:yangguojun
--  发布时间:2017/8/10 13:38:00
--  
非常感谢! 

\'查看交互内容
Dim buff(10000) As Byte
netstrm.read(buff,0, buff.length)
msgbox(System.Text.Encoding.ASCII.getString(buff))

在这段代码前面  能否 判断  收到的字节长度 是多少 

--  作者:有点甜
--  发布时间:2017/8/10 14:31:00
--  

Dim buff(SmtpServ.ReceiveBufferSize) As Byte
netstrm.read(buff,0, buff.length)
msgbox(System.Text.Encoding.ASCII.getString(buff)


--  作者:yangguojun
--  发布时间:2017/8/10 14:44:00
--  
这个方法好像不对 

output.show(SmtpServ.ReceiveBufferSize)
Return 22

得到的数值是  65536   实际上返回的长度只有8