NetBox 2.7 使用手册

远程访问的命令行解释器

NetBox 支持一个内建的 TcpServer 对象,可以方便的支持多用户网络应用,下面,我们使用 TcpServer 对象创建一个 Telnet 服务器,在 23 端口接受 telnet 请求,并将前面我们创建的命令行解释器移植到 Telnet 服务器中,以便通过远程访问命令行解释器。关于命令行解释器的建立可以参考创建一个命令行解释程序

第一步:创建 TCP 服务器

NetBox 提供了 TcpServer 对象用于创建高性能的网络服务器。TcpServerHttpServer 的基础,创建方法也基本相同。不同的是 HttpServer 对象自身实现了连接响应部分,而 TcpServer 则需要自行编程实现连接的接受部分。下面的代码在 23 端口创建一个将连接响应指向 accept.wsc 的 TcpServer 实例,并启动服务器:

Set TcpServer = CreateObject("NetBox.TcpServer")
TcpServer.Create "", 23, "\Accept.wsc"
TcpServer.Start

这段代码创建了 TcpServer 对象,并没有实现连接接受的部分,只是告诉 TcpServer 连接响应由 accept.wsc 实现。下面我们将来实现这部分代码。

第二步:连接响应

TcpServer 的连接响应由一个脚本部件实现,与普通的脚本部件并无不同,只是此脚本部件不需要在系统或者 NetBox 中进行注册,TcpServer 会自行装载。在脚本部件中,需要提供一个方法 OnAccept,其格式如下:

Function OnAccept(Socket, Contents)
...
End Function

TcpServer 接受到连接请求时,将自动加载此脚本部件,调用 OnAccept 方法,并传递接受的 Socket 请求及相关信息。下面就是一个完整的 TCP 连接响应脚本部件:

<?xml version="1.0"?>
<component>

<public>
    <method name="OnAccept"/>
</public>

<script language="VBScript">
<![CDATA[
Function OnAccept(Socket, Contents)
    Socket.Echo = true

    Do While Not Socket.Eof
        Socket.WriteLine Socket.ReadLine
    Loop
End Function
]]>
</script>

</component>

这个脚本部件接受到 Socket 以后,先打开 Socket 对象的 Echo 属性,自动回送接受的字符。然后进入循环,逐行回显输入的信息。

第三步:加入命令行处理

下面,我们需要把前面的脚本部件和我们以前建立的命令行解释器合并在一起,合并的过程并不复杂,只需要将命令行解释器中使用的 Shell.Console 更改为 Socket 便可,具体代码如下:

<?xml version="1.0"?>
<component>

<public>
    <method name="OnAccept"/>
</public>

<script language="VBScript">
<![CDATA[
Function OnAccept(Socket, Contents)
    Socket.Echo = true

    Set Console = Socket
    Set SubArgs = CreateObject("NetBox.Arguments")

    Do While True
        Console.Write "#"
        strCommand = Console.ReadLine
        If LCase(strCommand) = "exit" Then Exit Do
        SubArgs.CommandLine = strCommand

        If SubArgs.Count > 0 Then
            strExecFile = SubArgs(0)
            If LCase(Right(strExecFile, 4)) <> ".box" Then
                strExecFile = strExecFile + ".box"
            End If

            Set Script = CreateObject("NetBox.Script")

            e = Script.Load(strExecFile)
            If e = 0 Then
                Script.AddNameItem "NetBox", NetBox
                Script.AddNameItem "Console", Console
                Script.AddNameItem "Arguments", SubArgs

                e = Script.Run
            End If

            If e = 404 Then
                Console.WriteLine "Bad Command"
            ElseIf e <> 0 Then
                Set error = Script.GetLastError
                Console.WriteLine error.Category
                Console.WriteLine "Error Number: " & Hex(error.Number)
                Console.WriteLine "File: " & error.File
                Console.WriteLine "Line: " & error.Line
                Console.WriteLine error.Description & vbCRLF
                Set error = Nothing
            End If

            Set Script = Nothing
        End If
    Loop
End Function
]]>
</script>

</component>

总结

本文以一个完整的远程访问命令行解释器的实现,演示了 TcpServerSocket 两个对象的使用。


版权所有: 2003- 网络盒子