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

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示例程序,然后你就可以学习更复杂的协议了。
2014中国移动开发者大调查第一批获奖名单大曝光 移动开发云服务AVOS Cloud宣布完成A轮融资 Uplinq2014:人工智能嵌入硬件 万物互联建生态 Uplinq2014:基于Vuforia的新奇智能玩具 一应俱全!开源跨平台3D应用开发框架Minko 【线下技术培训】敏捷测试实战解析和系统方案 《近匠》Ping++:简单、高效、第三方支付SDK 有关编程的12个猜想 【问底】王帅:深入PHP内核(二)——SAPI探究 【CTO俱乐部走进汽车之家】活动图文实录 只为逼格?超薄便携式无线充电设备Deuce 戴尔未来重心:云计算、大数据、移动互联与安全 【讲师】搜狐于顺治:Container在搜狐PaaS平台中的应用实践 【先锋】从代码层诊断,云端OneAPM平台让开发者专注开发 阿里将推无线领域重磅计划 阿里百川无线开放大会揭晓 提升网站转化率的四步优化方案 开发者应该了解的API技术清单! 【讲师】腾讯刘永峰:Docker时代,公有云面临的挑战和机遇 移动开发工具服务商Mob推出免费短信验证码SDK 遇见他们,MDCC 2014移动开发者大会嘉宾揭秘 揭秘全球最小无线耳机背后的技术 《最终幻想》之父访谈:我为何转战F2P游戏开发 寓教于乐 11款最适合教儿童编程的学习工具 苹果iPhone6获工信部许可 本月17日在内地发售 使用Redis之前5个必须了解的事情 妆媒体微信公众号背后的酸甜苦辣 TIOBE 2014年10月编程语言排行榜:Dart首次进入前20 Instagram工程师教你如何改善App的性能 利用Neo4j对电影评论进行深度学习情感分析 【简讯】SQLite 3.8.7来了 性能提升超50% 浏览器重定向性能分析经验谈 获取NT管理员权限创意 ?寻找图书~? 为什么运行时正常的程序,编译成可执行文件后运行过程中出错... 怎样填充按钮客户区? 寻找图书~?? 请问如果数据量很大,比如大型企业的即时采集数据,应该用什么数据库系统处理呢?oracle,sysbase,db2,sqlserver还是cobol?? 这么简单的问题,难道就没有人能帮我了吗?!太遗憾了! 敬一杯“情人醉”给MM_mimi(人淡如菊),别人不要进来呀! 谁有过同样的遭遇??? 长整数除法的算法?? 关于Java Plug-in和Applet的一个问题 请求推荐有关SDK的好书!!!!!!! 我受不了了 个人主页链接如何让鼠标变成手形?谢谢! 老话题:三层结构中blob字段的存取出问题了? run-time类是怎么回事? 当多个程序对同一个文件进行读写操作,如何防止同时写入造成混乱? 求银行家算法的c程序! 请问W2K下面鼠标阴影的效果是用哪个API实现的? 我提议有编程经验的朋友们,一起来研究一种真正符合我们实际开发工作的模板 我用上kylix了!!!!!!! 请教,关于NT域用户的问题!NT账号,怎么设定唯一性呀?比如有aa的用户,我用aa登陆后,别人不能用aa同时登陆了?应该在那儿设置呀? Mfm1992?是个什么东西呀! 如何在informix/esql c中使用大事物? 如何保存收下來的email呢???!!!!! 关于一个网站建设的问题,望高手指点。 求救;如何建立一个登陆页面? 谁能给出一个远程访问互联网ACCESS数据库的经典代码?有28分送上! 怎样将-个十六进制数转换为十进制? 如何将java程序编译成dll文件 cannot focus a disabled or invisible window 一表我想通过文本框来增加记录,为何不能发送到表中,不要告诉我是没有post的原因。 奇怪,borland的开发能力这么强,为什么几乎没有一个象office那样流行的应用软件呢?如果它的应用软件很多,就不会象现在这样穷了吧? Delphi 数据库不如Power Builder 吗? 请问怎么安装新的控件? B样条曲线:如何由经过点反算控制点? Berzer曲线:如何由经过点反算控制点? 关于activereport的字符集问题 有没有计算曲线长度和交点的好方法? Install Shield For VC6怎么用???????????????????? ODBC数据库 ****有没有计算曲线长度和交点的好方法? ****Berzer曲线:如何由经过点反算控制点? ****B样条曲线:如何由经过点反算控制点? 有谁知道"边缘频率"、"中间频率"、"双频分析" 请问oicq登陆以后的住界面的我的蚝油dock是如何实现的,是什么vcl,或者自己写,如何实现?请指点! pfc的好处? 一个伪程序员的自白 不但给分,还给¥ 散分给喝过酒兄弟姐妹们(今天心情很不好,我深爱的人不爱我,苦痛,郁闷,多喝了几坛,请ghj1976、3B、roani谅解,最后一坛酒,感谢水园的朋友们) 怎样准备高程考试,还有三个月! 1.一批零件,甲乙两人合做8天可以完成,甲独做12天可以完成.甲乙合做6天后,甲因事离开,乙继续做,还需几天做完?2.甲乙两车同时从A、B两城相向而行,前2小时甲行了全程的1/4,乙行了全程的1/5,两 北师大版 16页第1,2,题 八年级下册数学书复习题16的8~12题(过程)人教版的 要用解比例的方法做,在一幅比例尺是1:2000000的地图上,量得甲,乙两个城市之间高速公路的距离是5.5cm.在另一幅比例尺是1:5000000的地图上,这条公路的图上距离是多少?学校举行团体体操表演, 八年级下册数学课本习题答案数学课本p90面的练习1、2、3p120面的练习2、9、p90习题的4、5、7、9、10、11、14、拜托了, \ 六年级下册数学题,就一道!数与代数这部分的题1.什么是十进制计数法?你还能说出那些计数单位?2.怎样比较两个数的大小?3.分数的基本性质和小数的基本性质有什么关系?4.小数点移动位置,小 鲁教版八年级下册数学课本习题答案 六年级下册数学44页第一题怎么写? 一道六年级下册数学题走50米的距离.第一次走79步,第二次走80步,第三次走81步.丁明走一步的平均长度是多少米? P104习题19.2 第十四题 复习题19 P122 第十二至十五题~ 六年级上册数学书100页答案 人教版6年级下册数学书22页第6题答案急 在一个长五分米、宽四分米、高六分米的鱼缸里,放入一个底面积为十二平方分米的小圆柱(完全浸没),水面上升了二分米,这个小圆柱的高是多少分米? 八年级下册数学课本习题19.我们这章学的是 特殊的平行四边形第4题:在Rt三角形ABC中,∠C=90° ,AB=2AC,求∠A,∠B的度数!第9题:在Rt三角形ABC中,∠ABC=90°,CD⊥AB与点D,∠ACD=3∠BCD,点E 小学六年级上册数学练习二十二的答案 六年级下册的一道数学题比例问题:买A、B两种不同的书籍共200本,已知A种书每本4元,B种书每本6元.买来后发现两种书所用的钱数一样多,求A、B两种书各买了多少本? 八年级上册人教版数学课本习题15.1第6、10、11题答案 青岛版数学小学六年级课本下册第22页9题 数学书六下102页18道希望当天回答 人教版八年级上册数学课本习题12.1第三题答案 青岛版六年级下册数学课本第四页答案现在就要! 六年级数学书下第102页第13题怎么做? 义务教育课程标准实验教科书八年级数学下册第16章 分式 第九页 六年级下册的数学课本有哪些内容, 六年级下册数学书答案86页2.3.4.5题p86-2解方程X-0.25=1/4 X/4=30% 4+0.7X=102 2/3X+1/2X=42P86-3一种树苗实验成活率是98%,为了保证成活380棵,至少要种多少棵树苗?p86-4绿化队为一个居民 八年级下华东师大版数学课本第十七章分式的全部习题答案 有的话追加到100 练习题 及习题 六年级上册数学书第101页人教版的 人教版八下数学书上的复习题17答案 几道分式计算怎么做 试卷的题 带图顺便讲解下, 人教版六年级下册数学书117页答案 P120到P122习题的全部答案、(5、8、9、14、15题做完了、不需要答案) 八下数学第三章 分式练习题1、当x等于什么数时,下列分式值为0?(x+2)(x+3)————— ←这是分数线x^2-42、已知x/2=y/3=z/1/2,则(x+3y-z)/(2x-y+z)的值是______3、如果a+1/a=3,那么分式a^2/a^4+a^2+1=_____4、化 六年级下册人教版数学书练习七答案(6-11)9题可以写也可以不写.莪在此谢过 八年级下册数学书复习题19答案急需呀,请你们帮帮忙吧 已知a+b+c≠0,(2a+b)/c=(2b+c)/a=(2c+a)/b=k,求k的值.请详解公式的含义等.已经知道答案是3,利用的是三个分式的分子相加比上分母相加.但是这个利用的哪个公式呢?什么样的定义,谁提出来的公式定义, 人教版六年级下册数学书第62页5.6.7题不需要答案,不过有也行,我的数学书木有带回家.. 数学八年级下册书复习题18的答案 新人教版八年级数学上册课本习题11. 北师大版六年级下册数学书第16页你知道吗的答案 人教版 还有d62666 - 四级 2010-4-16 22:57 感谢语或评论:您还可以输入字输入内容已经达到长度限制可以输入49字 如果您对这一回答非常满意,您可以选择给回答者额外的奖励:0 5 10 15 20 30 40 50分 八年级上册数学课本习题11.2答案人教版的,急! 北师大版六年级下册数学课本56页第9题一年级学生88老师4人 二年级学生95老师4人 三年级学生106老师4 四年级学生114老师6 五年级学生130老师6 六年级学生124老师6 大轿车40个座位120元 面包车10 八年级下册数学复习题19答案.告诉我答案吧 八年级下册数学教科书练习题16.3答案 苏教版六年级下册数学书16页7、8、9、10题算式加答案,十万火急啊, 人教版八年级下册数学习题16.2的第1题和第7题答案. 八年级上册数学课本44到45页练习答案..谁知道请告诉我一下.谢谢 1.一个圆柱形水池,它的内直径是8米,深2.5米,池上装有4个同样的进水管,每个进水管每小时可以注入水7.85立方米,四管齐开几小时可以住满水池?2.一个圆锥形沙堆,底面直径是4米,高是1.5米,每立 八年级下册人教版数学91页第9题怎么做? 北师大版八年级下册数学课本 19页第2题如图,在正方形ABCD中,AB等于4 AF=2 DF=1 ,图中有几个直角三角形?你是如何判断的?与同伴交流 老师让这样,我看不懂有点~1:be的平方=4方+2方=202:ef平方3 一堆煤,原计划每天四吨,可以烧150天,改改进炉灶后,实际每天烧2.4吨,这吨煤实际可以烧多少吨?在一幅比例尺为1:30000的设计图上量的一段路长7厘米,现在把修这段路的路程按4:3分配给甲乙两个 人教版八年级下数学书习题19. 八年级下册人教版数学书第36页第3题答案 加工一批零件,甲独做七天完成,乙独做九天完成,二人共同加工,期间甲替乙加工了25个,这样完成任务时,甲加工了这批零件的八分之五,甲原来应加工多少零件?师徒二人加工机器零件,徒弟8小时 八年级数学下册91页习题19.1第四 五 六 七 10题 【1】5700003420读作【 】,省略亿后面的尾数约是【 】.【2】143645是一个【 】位数,最高位是【 】,3在【 】位上,十万位上是【 】.【3】3003300这个数从左边数第一个3在【 】位上;第三个3在【 】 苏教版八年级上数学书第111页19题答案 2大题的地4小题第四大题的第二小题有的谢谢
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn