VB与网络应用3

按上节的说法,我们可以把Web服务器看是一个服务端,而浏览器则是一个一个的客户端,他们以一个相同的端口(如HTTP默认为80,FTP默认为 21),所以就能通信。他们的工作流程大概如下:首先Web服务器在某一端口上等待浏览器的连接,然后浏览器向目标Web服务器发出要求浏览某一网页的请 求,最后 Web服务根据请求发送相应的网页源文件给浏览器。

用过ASP的都知道,我们有一个Web服务器叫IIS,这个服务器就是根据浏览器的请求而产生相应的源码然后发送到用户的浏览器上的。

别的不多说,界面很简单:

将文本框设置可以显示多行文本。为了有别于其他,我们这个Web服务器将使用端口124。制作流程如下:

在Form_Load事件中将服务器的侦听端口设为124:

Private Sub Form_Load()
        wskServer.LocalPort = 124
        wskServer.Listen
End Sub

在wskServer的ConnectionRequest事件中接受客户端(浏览器)的连接:

Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)
        If wskServer.State <> sckClosed Then
                wskServer.Close
        End If
        wskServer.Accept requestID
End Sub

在wskServer控件的DataArrival事件中加当浏览器的请求文本来时发送源代码过去:

Private Sub wskServer_DataArrival(ByVal bytesTotal As Long)
        'Dim tempS As String
        'wskServer.GetData tempS
        'txtMain.Text = tempS
        txtMain.Text = txtMain.Text & "一个IP为[" & wskServer.RemoteHostIP & "]连接对象" & vbCrLf
        sendCode ("index.htm")
End Sub

这里在窗体模块(窗体声明)中加入一个发送源代码的sendCode的Sub过程:

Sub sendCode(fileName As String)
        Open App.Path & "\" & fileName For Input As #1
        Dim tempS As String
        Do While Not EOF(1)
                Line Input #1, tempS
                wskServer.SendData tempS
        Loop
        Close #1
End Sub

在cmdClose的Click事件中关闭窗体和服务:

Private Sub cmdClose_Click()
        wskServer.Close
        Unload Me
        End
End Sub

最后要在wskServer的SendComplete事件中加入如下代码:

Private Sub wskServer_SendComplete()
wskServer.Close
End Sub

这里制作好了,将工程文件保存在[C:\temp]文件夹中,然后自己做一个网页名为index.htm也放在[C:\temp]中。这时按F5运行,然后打开IE,输入:http://127.0.0.1:124,这下等网页的显示吧。

这只是一个简单的Web服务器,只能给你们说明一些原理,下面说几个问题:

1、我们如何知道客户端要的是哪个文件:

实际上我们给Web服务器发送连接会有一个文本请求来说明自己要的是什么文件,比如你把上面的wskServer的DataArrival事件中的 前三行取消注释,再次按上面的方法来运行一次,不过这次把请求网址改为:"http://127.0.0.1/1.htm",那么文本框中会显示浏览器的 请求文本为(以我的浏览器为例):

GET /1.htm HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 127.0.0.1:124
Connection: Keep-Alive

你看第一行就知道客户端要的是什么文件了。

2、为什么在wskServer的SendComplete事件中要关闭服务器:

回答这个问题你可以将wskServer.Close注释起来再次运行,你会发现要很久(或要刷新网页)才会有页面出现,这是因为如果服务一直在的话,那么浏览器以为服务的数据没有传完,就一直等待,所以要在传送完源代码时关闭服务器。

3、能不能用Winsock做自己的浏览器:

能。我们可以用Winsock下载网页的源代码,但在VB中我们有另一个功能更强大的控件来做我们的浏览器,将在下节中说明具体的做法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值