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

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示例程序,然后你就可以学习更复杂的协议了。
Windows外壳扩展编程-Delphi资料 避免二次运行-Delphi资料 编程实现文件关联-Delphi资料 编写定制的文件流实现文件读写加密-Delphi资料 采用多线程进行数据采集-Delphi资料 产生临时文件名-Delphi资料 程序不出现在任务栏-Delphi资料 程序缩小为任务条右下角的小图标-Delphi资料 得到 Windows 用户名和序列号-Delphi资料 得到windows临时路径-Delphi资料 得到Windows用户名和序列号-Delphi资料 得到计算机的名字和ip-Delphi资料 得到内存的 Status-Delphi资料 得到上一个激活的组件-Delphi资料 得到在内存中运行的所有应用程序的handle-Delphi资料 调用控制面板项目大全-Delphi资料 动态改变当前显示模式-Delphi资料 动态改变屏幕分辨率-Delphi资料 动态建立不常用的对象-Delphi资料 对控制面板进行操作-Delphi资料 返回程序执行参数-Delphi资料 防止 Win95 显示严重错误-Delphi资料 改变操作系统日期-Delphi资料 改计算机名-Delphi资料 关闭 Windows-Delphi资料 关闭外部应用程序-Delphi资料 监视剪贴板内容-Delphi资料 检测磁盘是否变化-Delphi资料 检测驱动器容量-Delphi资料 检查驱动器是否就绪:-Delphi资料 建立简单的任务栏应用程序-Delphi资料 现在什么地方下mp3比较好 条形码阅读问题 有关鼠标单击和双击的问题,详情请进~~~~~~~~(看在偶出了一百分的份上,:-D) 很多windows forms下面的程序都实现了XP或是VS.NET风格的菜单了,Web界面上怎么实现 在实际项目中用InterBase数据库可行吗? 有关打印问题????????? win2000找98奇慢无比 template class的连接问题。请赐教 求拓扑排序的所有可能序列?50分求教 java程序员? 请问有没有介绍五子棋算法的好网站?我要做一个和机器下的程序!大家帮忙 请问在编程中的例程,行程和过程的定义是什么?以及他们的区别。 该怎么使用 action() 与 mouseDrag()?请看我的程序问题在哪? DELPHI6.0中的最小化事件是什么 marry____不只怎么办了 (★如何初始化控件CMSFexGrid★) 各位兄弟,不知哪里可以查到所有常量的值? 怎么把帽号赋给一个变量?thank 为什么WinXP激活后就不能重装? 困惑--判断颜色是否相同??? (急急急)寻找:win2000/xp/nt/9x 的可安装文件开发包(IFS Kit),送大分 如何在DB2(V5.2)下面实现表的ID自动增加功能? 帖子结不了,在送300分~~~~~~~~~~ 请问oracle那些版本以上叫8i,常用的是哪个版本,有WINDOWS下使用的吗? 我看过的TOOLBAR 都是横着的,可是我现在想做一个竖立这的TOOLBAR 我该怎么做啊!我翻遍了 CODEGURU 可是没有一个这样的例子! 谁有什么好例子 多谢了!! error C2065: 'end1' : undeclared identifier 我怎么用CreateDialog 建立一个对话框呢! 谁有代码!!多谢!CreateDialog(hInst,LPCTSTR"ID_",hWnd,DlgProc); 送小分:怎样在一个对话框程序中产生一个HWND视窗? 在Windows 2000 Professional 下可以装VS.net吗? 关于文件上传问题 关于微软自己的控件下载问题!! 关于打包的问题 急求答案--请教高手:有关IIS与TOMCAT...... 请问有哪为知道,weblogic提供petstore例子,什么地方有详细说明?? 怎么样利用CHtmlViw将参数用POST的方式提交给WEB服务器 不明白.. 请问遇到连接错误该如何解决? pws的日志在什么地方? 在VBA中如何使用ClipBoard 哪里可以下载mastering delphi 6,或者其他有关delphi6的书籍。 vb和access的问题 C++Builder不支持tif或tiff格式怎么办? 为何我的TQuery为只读? 用Winsock传送文件如何判断一个文件已经传送完毕?(一定给分!) VC程序方法的请教。 请问如何禁用一个页面的cache 不好意思,怎么把引号赋给一个变量?thank 关于字体的保存,用序列化 关于oracle连接的一个简单问题 一个构件地址35分,快快来吧。 如何实现实时监测注册表的变化呢??????????? 如何锁定一个SQL SERVER的表? 作文:散步1.要感人.2.一家三口要创造温馨的气氛.3.要有感受.4.自己写! 军训作文500字 自信 作文 写一篇关于友谊的作文 300字 为什么恩格斯把思维者的精神比喻为“地球上最美丽的花朵”. 自信的作文可以在许多事上运用的 【选择题】恩格斯说:“思维是地球上美丽的花朵”这说明人的生命最具有智慧,因而是最独特的/选择见问题补充①会思维的人才是最美丽的人②人的生命最具有智慧,因而是最独特的③思想家 初一军训作文,500字左右 作文 自信的我 我想要写一篇,关于朋友之间的友谊400字作文. 有关同学之间友谊的作文 我很自信 作文 恩格斯说:“心灵是地球上最美的花朵”是英文说的吗?英文原文是什么? 英语通知写作,类型:学生会通知为了迎接"元旦"佳节,学校准备开会庆祝,校长将要在会上讲话,表彰(commend)三好学生个先进班级.各班还准备了精彩的节目.时间:12月30日下午2:30(星期3) 求助英语课文中的英语短语 关于军训的作文(500字)高中 英语通知作文假如你是李华,是某国际中学高一(三)班的班长,你校将组织一次集体活动 到岳麓上旅游.请你用英语拟一个口头通知,须包括以下内容.活动时间,本周六 活动内容,登山,中午在山上 家乡的春节作文500字急 军训感受500字作文500字 求英语广播通知作文! 哪里能找的英语课文短语? 初一军训作文,500个字 英语作文 为英语广播站草一则通知你在校学生会负责“英语角”的活动.请你为学校英语广播站草一则通知.要求:1)“英语角”定于本周星期四下午四点在学校花园里举行2)五位在北京师 家乡的春节的作文500字 六年级军训作文500字 可以广播的英语文章 故事 风景 友情为话题写一篇作文 一篇初中生英语作文.85单词左右就行,只要是英语就行了.你们看图片了吗?要求在图片上啊。是学如何提高英语成绩的!请你们看图片,右键点击链接放大。 他让我明白了自信 作文快好一点的结尾就行了,前面不用写了 倒是有人来答呀! 谁能写一篇关于收获友谊的作文?(重点是内容)一篇《收获友谊》的作文,开头结尾不用写,写内容就行(和故事差不多) 需要一篇介绍中国的初中生英语作文, 三年级语文书28课狮子和鹿读了这篇课文,我明白了什么道理? 作文素材:生命因追求而精彩从<生命因追求而精彩>的角度给一些优美素材:例如:从一个过程、现象来表达一种精神:如:流水~、鲜花~、野草~、蝴蝶~大家能举一些结构优美点的 求高手想一篇英语作文(是初中生的)怎样解决生活中的问题 字数:60词以上是英语作文英语作文!各位大侠不要看错~ 让我明白了一个道理 作文450字 作文《生命,因为追求而精彩》或关于它的素材 同学之间友谊的作文要主要将同学间的友谊,500左右,一件事,开头简练.快! 我明白了一个道理 作文 以《生命因追求而美丽》为题的作文!600字或以《生命因追求而精彩》为题的作文!600字! 同学之间的友谊作文急! 找一篇有关军训的文章(我们刚刚军训完)600——1000字 《追求生命的ㄨㄨ》作文怎么写 同学之间友谊作文ggggg 《军训心德》作文1000字 以“生命的追求”为话题的作文的范文以“生命的追求”的话题的作文.请各位给我说说怎么写啊.范文最好. 《爱因斯坦小时候》的阅读答案,以下有短文与问题,请查看. 爱因斯坦是一位伟大的科学家.他从小喜欢钻研问题,做那些需要动脑筋、花力气才能做好的事情. 爱因斯坦五岁的时候,有一天,爸 请给我人生路上的一些建议,让我的生命更加精彩…我是1984年出生的,目前的月薪2500(无食宿开支),老家在湖南株洲.自己存了有大概十万块钱.请问我今后该怎么继续走下去?工作已是滚瓜烂 怎么找英语课文中的词组最好列举出来,我是初一下学期的,都写出来哦,还要标上课题! 阅读短文,回答下面的问题Jane always goes to school early ,She likes to talk with her friends before class.After school she goes home very late ,because she likes to look at the animats in a pet shop ,She likes dogs best,One dog is white .Sh 运动让生命更精彩作文 以“生活是需要自信的”为作文人生需要自信作文(初中水平的作文) 阅读短文回答下列一个问题.地球的外衣从前,地球也常被石头砸疼.宇宙中飞舞着许多石头.有一次,地球对人们说:“给我做件外衣,让我不再被砸得这么疼好吗?”玻璃工人忙碌起来,为地球做 让生命与生命更近些 作文 生活需要自信心的作文! 读书自信人生作文800字,不要离题不是考试作文,是小练笔. 有关让我们的生命更加精彩的论文RT! 我生活在自信中 作文400字以上 思维-------地球上最美丽的花总结 有关生命的作文 求助作文素材.题目分别为《感动》《生活需要自信》作家们帮帮忙吧怎么写比较好
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn