VB自带的Winsock控件是一个非常强大的工具,利用它你可以在你的程序中使用各种Internet协议。如果你对网络协议及计算机之间通信的原理有所了解的话,理论上讲你可以编写任何Internet程序。本文向你介绍如何使用Winsock控件以及如何通过它来使用几乎所有的Internet协议,例如 HTTP (WWW), FTP, NNTP (News), SMTP和POP3 (Mail).

让我们先来看看两台计算机通信的模型。一台是客户机,另一台是服务器。

所有必需的软件被装在客户端计算机上。客户端计算机可以收发电子邮件信息,浏览WWW网页,参加新闻组讨论以及通过FTP从服务器上下载文件。这些软件共存于一台机中并相互影响。

另一种软件被安装在服务器上。这类软件向远程客户端计算机提供服务。服务器可同时响应多个客户计算机的服务请求。换句话说,服务器能在同一时间扮演几个服务器的程序,如FTP服务器, WWW服务器和邮件服务器。

由于Socket技术,使得同时稳定运行几个Internet应用程序成为可能。Socket在MS Windows中的应用被称为Windows Socket或干脆叫Winsock. Socket是一个程序设备,它允许你通过TCP/IP端口为某个网络应用程序接收或发送数据。程序可按需要产生足够数量的Socket,但是一个Socket必须对应一个TCP/IP端口。

客户端计算机产生一个socket并随机分配给它一个TCP/IP端口,该socket就利用这个端口来进行工作。但在服务器端,却不是这样做的。作为一条规则,服务器端的应用程序是用预先定义好的TCP/IP端口来工作。比如说:FTP服务器的端口号为21,WWW服务器的端口号为80. 下表列出了常用协议的默认端口号

协议 端口号 描述
SMTP 25 Simple Mail Transfer Protocol 
POP3 110 Post Office Protocol
NNTP 119 Network News Transfer Protocol
FTP 21 File Transfer Protocol
HTTP 80 Hyper Text Transfer Protocol

客户端计算机与服务器是通过其中一个网络协议来开始网络进程的。客户机首先产生一个socket并利用它来同服务器建立连接。socket取得服务器的地址及要进行连接的端口号。对Winsock控件来讲,你必须用它的Connect方法。下面这个代码表示同一个FTP服务器进行连接。

Winsock1.Connect "ftp.microsoft.com", 21

正如你所见,该方法包括两个参数,第一个是远程服务器的名称或IP地址。第二个是端口号,它规定了你想从远程服务器那里获得哪种服务。在这里,21号端口是FTP服务器正在侦听的端口号。所谓侦听就是说服务器应用程序等待来自21号端口的客户机的服务请求。如果连接成功,Winsock控件会产生一个Connect事件。

接下来的事件根据你使用的网络协议不同而不同。

服务器等待你的命令 (HTTP) 据所使用的协议,服务器发送所要求的数据并断开连接服务器向客户端计算机发送欢迎信息及代码(FTP, SMTP, POP3, NNTP),表示服务器现在等待接收你的命令服务器向客户端计算机发送不能维持现有连接的消息及代码(FTP, SMTP, POP3, NNTP) 在连接期间,服务器会向客户端计算机发送消息,而我们要做的就是接收并处理这些消息。在Winsock控件中,主要通过其DataArrival事件来进行。

Dim strData As String
Winsock1.GetData strData

上面的最后一行代码的作用是从缓冲中读取服务器传来的数据并储存在strData变量中。然后你就可以根据需要处理信息了。

同服务器建立连接并从服务器处获得第一条消息后,你就可以通过向服务器发送命令及等待其响应的形式同服务器进行通话了。下面是一个同MS FTP服务器进行通话的例子。

Client: Tries to make connection with ftp.microsoft.com (port 21)
Server: Accepts connection and sends first response to client
Server: 220 ftp Microsoft FTP Service (Version 3.0).
Client: USER anonymous
Server: 331 Anonymous access allowed, send identity (e-mail name) as password.
Client: PASS gdal@comset.net
Server: 230 Anonymous user logged in.
Client: CWD developr
Server: 250 CWD command successful.
       
       为了向服务器发送数据,你需要用到SendData方法,下面是一个发送上面例子中第一条命令的例子:

Winsock1.SendData "USER anonymous" & vbCrLf

所有的命令,规则及命令顺序都可在RFC (request for commants)文件中找到。

协议 RFC 地址
SMTP  821 http://www.faqs.org/rfcs/rfc821.html
POP3  1725 http://www.faqs.org/rfcs/rfc1725.html
NNTP 977 http://www.faqs.org/rfcs/rfc977.html
FTP  959 http://www.faqs.org/rfcs/rfc959.html
HTTP  2068 http://www.faqs.org/rfcs/rfc2068.html

每个协议都有自己的一套命令及回应。尽管如此,你在开发程序时仍需遵循一些基本的规则。

命令是大小写敏感的一些命令需要参数,在命令与参数之间要留空格命令必须以vbCrLf结尾来自服务器的回应以字符和数字组成。附加的文本取决于服务器所用的软件,但是数字代码是常量。你要处理的就是这些数字。这些数字由三位数组成,服务器的回应以这三个数字开头,因此用LEFT函数就可方便地截取这三个数字。例如:
strResponseCode = Left$(strServerResponse, 3). 
       关于断开连接。通常用QUIT命令来断开同服务器的连接。发送了QUIT命令后,服务器会传回最后一条消息并关闭连接。对于Winsock而言,会产生一个Close事件。

最后需要注意的一点是错误处理。你需要注意两类错误。一类是应用的协议的错误,如果使用了不正确的命令就会产生这个错误,从服务器返回的消息代码中可得知此类错误。另一类错误是Winsows Socket错误。对于这类错误,Winsock控件会产生一个Error事件。

如果你对该控件有足够的认识的话,可看看Winsock Terminal示例程序,然后你就可以学习更复杂的协议了。

转载于:https://www.cnblogs.com/Track/archive/2005/09/25/243767.html

如何利用Winsock控件编写自己的Internet程序相关推荐

  1. 基于VB中WINSOCK控件的网上象棋系统的实现

    本文发表在<微型机与应用>杂志2001年第3期. 基于 VB 中 WINSOCK 控件的网上象棋系统的实现 马根峰1   ,  孙艳2  , 王平1 (1.重庆邮电学院自动化学院,重庆,4 ...

  2. VB6 通过winsock控件数组实现客户端和服务器多对一通信

    说明:我是在最近开发一个考试系统过程中搜索到上面文章的,它提供的思想非常实用.当然,这篇文章仅提供了一个基本思路,详细的实现在人民邮电出版社出版的<Visual Basic网络通信协议分析与应用 ...

  3. 利用tab_control控件在对话框中加入属性页的方法详细介绍

    在对话框中加入属性页 方案一 在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个).然后利用Class Wizard来为Tab C ...

  4. Delphi利用MSCOMM控件进行GPS数据采集

    1.准备 GPS(Global Positioning System),即全球定位系统,利用GPS卫星的测距和测时功能进行全球定位,在许多系统中,如机场导航系统,出租车辆管理和调度系统.江河流域的灾害 ...

  5. 利用SiteMapPath控件做论坛导航

    利用SiteMapPath控件做论坛导航(也适合其它系统) 首先,论坛非常简单,就三个网页,全部用的一个模板做成. 第一个网页(default.aspx):用于显示论坛的类别,点击相应的类别,将cat ...

  6. WinSock控件及WinSockAPI

    WinSock简介       Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络 ...

  7. JQuery专栏之十五————利用文件框控件file实现文件的上传

    15. 利用文件框控件file实现文件的上传. 文件上传的方法有很多,jQuery也有许多文件上传控件.本例采用最基本的HTML文件框(<input type='file')实现文件上传,不限制 ...

  8. ASP中利用OWC控件实现图表功能详解[zz]

    ASP中利用OWC控件实现图表功能详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图, ...

  9. Windows10下VB6.0开发——利用PictureBox控件实现数据点实时绘图

    前言:VB中可以利用PictureBox控件实现数据点实时绘图功能. 1. 控件PictureBox   下面是PictureBox的图标:   将该控件拖到目标位置后调整它的形状大小,修改它的背景色 ...

最新文章

  1. epoll/select
  2. oracle 树 向上查询,Oracle中显示树结构查询语句【子查父和父查子】
  3. java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?
  4. html5与课程思政,“课程思政”怎样做
  5. php 类分开写,自己前几天写的无限分类类_PHP教程
  6. debian重启ssh服务_VScode链接服务器并配置公钥SSH Keys
  7. hi模板文件报乱码问题
  8. windows11安装不了怎么回事,电脑如何安装win11
  9. 电子商务入门、实操、行业分析及公司案例等精彩系列问答有哪些?
  10. vc++2010学习版注册码分享
  11. 树莓派中文环境的配置
  12. 收官之战,年终的财务分析如何做?
  13. ligerui 用html 来初始化 ligerform
  14. 招投标异议与政府采购质疑二者差异大比拼,你必须掌握
  15. python turtle库画画
  16. Docker入门笔记(1)
  17. 手机个人邮箱怎么注册,手机邮箱注册登录
  18. 哪款蓝牙耳机吃鸡没延迟?游戏蓝牙耳机推荐
  19. 光伏箱变保护测控装置
  20. 损失函数、代价(成本)函数、目标函数

热门文章

  1. C#跑马灯,图片滚动,后台获取图片地址。动态绑定图片,imag显示文字
  2. 【压缩率3000%】上交大ICCV:精度保证下的新型深度网络压缩框架
  3. SQL语句中各个部分的执行顺序(转)
  4. 在Eclipse中的Android项目里实现代码“.NET研究”复用
  5. Redis与Memcache的对比
  6. solr的认识、linux下安装、java下使用(含下载资源)
  7. Redis的安装部署
  8. HTML5 localStorage本地存储
  9. python 以 utf-8 格式写文件
  10. 此blog已经迁移~~~