第三节:Winsock制作Web服务器
在本节中,我们将制作一个简单的Web服务器(点击这里下载源文件)。 按上节的说法,我们可以把Web服务器看是一个服务端,而浏览器则是一个一个的客户端,他们以一个相同的端口(如HTTP默认为80,FTP默认为21),所以就能通信。他们的工作流程大概如下:首先Web服务器在某一端口上等待浏览器的连接,然后浏览器向目标Web服务器发出要求浏览某一网页的请求,最后Web服务根据请求发送相应的网页源文件给浏览器。 用过ASP的都知道,我们有一个Web服务器叫IIS,这个服务器就是根据浏览器的请求而产生相应的源码然后发送到用户的浏览器上的。 别的不多说,界面很简单:
将文本框设置可以显示多行文本。为了有别于其他,我们这个Web服务器将使用端口124。制作流程如下: 在Form_Load事件中将服务器的侦听端口设为124:
在wskServer的ConnectionRequest事件中接受客户端(浏览器)的连接:
在wskServer控件的DataArrival事件中加当浏览器的请求文本来时发送源代码过去:
这里在窗体模块(窗体声明)中加入一个发送源代码的sendCode的Sub过程:
在cmdClose的Click事件中关闭窗体和服务:
最后要在wskServer的SendComplete事件中加入如下代码:
这里制作好了,将工程文件保存在[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",那么文本框中会显示浏览器的请求文本为(以我的浏览器为例):
你看第一行就知道客户端要的是什么文件了。 2、为什么在wskServer的SendComplete事件中要关闭服务器:回答这个问题你可以将wskServer.Close注释起来再次运行,你会发现要很久(或要刷新网页)才会有页面出现,这是因为如果服务一直在的话,那么浏览器以为服务的数据没有传完,就一直等待,所以要在传送完源代码时关闭服务器。
3、能不能用Winsock做自己的浏览器:能。我们可以用Winsock下载网页的源代码,但在VB中我们有另一个功能更强大的控件来做我们的浏览器,将在下节中说明具体的做法。 |








