DSAPI多功能组件编程应用-网络相关(中)

时间:2023-01-07 00:04:33

[DSAPI.DLL下载地址]


在中篇,我将演示比上篇稍微复杂点的功能.如HTTP监听和局域网广播.

有时,我们会有这样的需求:用户通过浏览器来访问获取数据,我们的程序需要监听指定端口,根据不同的请求返回不同数据给用户,当然,用户可能使用的是浏览器,我们先来看下面的代码:

   Private WithEvents 监听 As New DSAPI.网络相关.HTTP监听
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CheckForIllegalCrossThreadCalls = False
With 监听
.绑定端口 = 2000
.编码 = System.Text.Encoding.Default
.参数前导符 = ""
.传输使用Bas64加密 = False
.允许外网连接 = True
.启动监听()
End With
End Sub

使用WithEvents方式,将更方便使用其事件.

释义:

编码:指示返回给客户端时使用哪种字符编码
参数前导符:是否需要使用指定字串开头,比如
.参数前导符="cmd:"
当用户输入http://127.0.0.1:2000/cmd:help,时,程序将获取的"客户端.传入的Url"从前导符后面开始提取,即"help",如果指定了前导符,那么当用户的URL请求不是以前导符请求传入时,将触发服务端的"收到被阻止的客户端请求"事件.
传输使用Base64加密:指示输出到客户端页面的内容是否使用Base64加密,将启用此加密时,读取客户端输入流的也应使用Base64加密.
允许外网连接:指示本监听服务是否允许外网访问,如果为False,则外网所有请求都不进行处理,并触发"收到被阻止的客户端请求"事件.

编写一个监听服务端
   Private Sub 监听_收到客户端请求(客户端 As DSAPI.网络相关.HTTP监听.监听客户端) Handles 监听.收到客户端请求
TextBox1.Text &= 客户端.传入的URL & vbCrLf
If 客户端.传入的URL = "help" Then
监听.写入信息到指定客户端输出流(客户端, "This is help")
End If
End Sub


运行以上代码时的效果图,左图为监听服务端,右侧为客户端浏览器.

DSAPI多功能组件编程应用-网络相关(中)  DSAPI多功能组件编程应用-网络相关(中)


DSAPI.网络相关.HTTP监听支持以下事件:
监听已启动
监听已停止
收到被阻止的客户端请求(客户端 As DSAPI.网络相关.HTTP监听.监听客户端)
收到客户端请求(客户端 As DSAPI.网络相关.HTTP监听.监听客户端)
遇到错误(错误 As Exception)

传入的客户端
以上述http监听服务端中,当接收到客户请求时,会形成一个客户端信息,该信息会包含在“收到客户端请求事件里,客户端信息为简单的封装,包含如下内容:
传入的URL

当前会话上下文

端口

会话时间

浏览器信息

请求类型

输出流

输入流

局域网广播
直到写这个,我才看到里面的函数我没有改成中文,不过不影响使用。

发送局域网广播消息
DSAPI.网络相关.局域网广播.局域网广播_服务端.SendMessage(System.Text.Encoding.Default.GetBytes("Hello Everyone"))

发送不需要定义或声明发送者,但是接收广播消息需要有一个对象来实时接收,所以接收广播消息时:


 Private WithEvents 客户端 As New DSAPI.网络相关.局域网广播.局域网广播_客户端

    Private Sub 客户端_ReceivedMessage(Msg() As Byte) Handles 客户端.ReceivedMessage
Console.WriteLine(System.Text.Encoding.Default.GetString(Msg))
End Sub

当广播客户端接收到消息时,将触发”ReceivedMessage“事件。