说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何利用Winsock控件编写自己的Internet程序

HTML文档下载 WORD文档下载 PDF文档下载
VB如何利用Winsock控件编写自己的Internet程序


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示例程序,然后你就可以学习更复杂的协议了。
研发周报:超实用的JavaScript技巧及最佳实践 2013最吃香的技能:Java称霸、Android势头正猛 移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi .mdb文件如何转换成为.asa文件? 请问如何保存绘制的图形? 有一个框架包含2页,左侧页面中有很多复选框。如何钩选一个复选框然后,马上就提交到右侧框架的页面中。 用过压缩控件zipTv的兄弟进来瞧瞧!!! 请问如何设置srcollbar为xp的样式? 求助ddlb里面的事件触发问题。 请问会delphi,c++builder,Vc 现在去北京好找工作吗,工资应该会是多少阿,谢谢 RPC服务选项变灰色,与注册表的哪项有关? 想学LINUX,请推荐好书 能不能捕获某个窗口的图像,即使在这个窗口被其他窗口挡住的情况下? 找mp3 test 程式,出測試方案(請相關高人指點) 我来搬救兵的:导出数据窗口数据,然后图片(工具栏)不可以显示。 win2000安装问题 c在c++中出现的奇怪问题,请高手帮忙解答 MSMQ如何在从远程外网取消息队列的消息?? 用sql语句来对数据的随机读取(在线等.......) 使用ICS共享上网,ICS会自动给客户机分配IP,如何知道这个IP是多少? 一个控制窗体不能通过鼠标改变大小的问题 这是什么 wrox 的书的源码下载怎没有-up有分 求助,JSP+Crystal Report9.22问题。怎么导出EXCEL格式 CSDN的朋友,您如果有时间,给我写一个,快速傅立叶变换的程序把。 二叉树问题 谁对zope,cmf 有研究,谈谈设计思路? 问一下用过VB的人几个问题,谢谢先 关于显示千分位的问题 win98拨号服务器问题 你竟然不回我的短信! 如何在Datagrid的最后追加一行,这一行放多个文本框,用来添加新数据 谁有可垂直居中的QRLabel? 怎样通过程序模拟网页post数据到一个servlet? wrox 的书的源码下载怎没有-up有分 《我们共同的容闳》专辑明天在央视国际频道播出 程序发布问题,大哥大姐来帮忙呀 在线咨询:用ATL做ActiveX控件,能不能让控件是个多文档界面程序。 谁记得这道题是怎么解答的? 申请www开头的域名都是收费的吗 苦恼!考研还是工作! 短信产品:CMPP接口、SGIP接口、CMPP代理网关、计算机与手机连接的短信群发 你是不会知道的!! acrobat pdf 不能打印 怎样使程序发生异常时不弹出带红叉的窗口,异常可采用日志文件记录? 我下载了mysql-3.23.57-win.zip 安装在win2k server下为何不能用? 妹妹求救:用什么软件可以编辑.dll文件! 帮帮忙 高分求VS.NET2003正版中文版下载 XML数据导入到SQL Sever数据库 IIS运行不了ASP.NET文件,怎样做呢? oracle8i安装问-在线等待-急 怎么开启dbms_output的功能。 如何批量运行插入语句??? 英语翻译自本授权书签署之日起,作者同意将该论文的著作权在全世界范围内授权《*****》杂志 有没有人帮忙解释下爱因斯坦的相对论? 俗人雅钦什么意思 “我在这里完全是一个俗人”在文中的含义 反义词:得意洋洋—— 面不改色—— 安居乐业—— 那是一次大胆的尝试开头怎么写 熊猫人中所有歌曲片头片尾插曲,全部的 急需一篇关于国庆或中秋的作文600字 熊猫人中的一首歌我想知道熊猫人中的一首插曲,不是《熊猫人》和《最后一页》,是一首节奏很轻快的歌,好像是南拳妈妈唱的,在大结局中赤南介回忆自己跟莉亚的时候放的一首插曲,是什么 熊猫人中歌曲详细点哦...还有经常会放的那首钢琴曲 熊猫人中潘达的扮演者潘达,也就是熊猫人的扮演者.他是谁,叫什么名字? 宁波市财政每年新增资金3000万元扶少女被人勒昏剪掉双侧乳头 嫌疑人自称男子住宾馆强奸隔壁女子后回原房间睡觉十八届三中全会前瞻:三大焦点构建中国李雪主成为朝第一夫人 传因长得像金正监听丑闻引盟友提高“炮轰” 美国公信突尼斯举办中国电影节温州经济三季报让人眼前一亮 GDP同白宫拒回答是否曾监听默克尔 美德信任朝韩在非军事方面保持合作 朝鲜遣返6供应杭城70%生鲜猪肉 滨江区昨再查与洪水赛跑 奋战七昼夜 换来百姓安宁奥巴马再辩对叙动武 称事关美国国家安华裔候选人少无合法身份 华人对美国政昆明市民需持有“双证一签”才可实现赴哪种交通方式最划算? 当地人教你到台云南香格里拉发生5.9级地震 救援部女排VS日本战绩:17战12胜5负 美网 郑洁不敌纳瓦罗无缘16强 无缘九成人支持“减负十条” 多数人倾向高清末太监偷盗成风:卖皇宫库内真品买赝42岁谭宗亮成全运六朝元老 51岁老断罪之忆打包极品美女四路公交强者纵横录一球成名人物召唤系统无限命运之神天王老子封侯天下重生爱上小丫头封神印记阿图什旅游徐光启墓旅游徐家汇藏书楼旅游尼塞村旅游龙塔旅游松花江旅游友谊码头旅游照壁山旅游油菜花海旅游西山旅游上海国际赛车场旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘