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

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示例程序,然后你就可以学习更复杂的协议了。
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 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 小心,商家已经盯上你了 一软一硬 让你时刻保持清醒的可穿戴产品 寓教于乐 贝瓦依托移动平台打造中国式儿童“轻教育” 中科创达:CES2014上的中国红 为什么在设计阶段使用ACTIVEX控件,总是导致PB异常结束 如何拖动窗体??我知道各位老大都会 大家给解释一下 SUN ONE 啊,不知道是何产物? 谢 ※※※※※求Flash封面,有意者请进※※※※※ 求救:高分 急 用代理服务器,可以上网,却不能上qq~~怎么办? 用ole控件打开一个WORD文档后,如何保存? BCB 6.0 装不了我以前在 5。0 下面装的一个控件 怎么回事? 来者有分!!!!存贮过程中创建视图的问题 在线等待!急,tomcat中文问题 急急急急急急!!!delephi 能调用.class文件吗??也就是使用java的接口!如何作??? 请各位大侠尽快指点! 怎么让StringGrid的行数随数据的多少改变? 一个关于线程的问题 怎么拖动无标题栏窗体? 使用FTP碰到的问题 windows下的网络编程的c库函数有什么?怎么用? 为什么我的机器加入域的时候会出现“提供的凭据与已存在的凭据集冲突”的错误? 一个简单但很迷惑地问题!请指教! 分发高手睇过来 请求帮助 [转帖·放分]恶毒女人的情书 如果自己创建一个类,在这个类中想调用当前CXXVIEW类中的函数该如何办? P:Pointer? 数据库连接问题? 如何在菜单中显示图片?谢谢! 在线等待!急,tomcat中文问题 工作很非常特别烦心,散分 如何监控网络中的打印 请问在COMCAT中如何更改根目录的路径 java 中的double类型,在Oracle数据库中应该对应的是什么类型? 怎样作才能不让用户随意更改系统时间和日期? 关于单击和双击的问题 请问一个关于GB要转换成日文的Shift-JIS内码的问题 请问一下这个字符串什么意思? 在ASP.NET中怎樣讀取通過用XMLHTTP Send過來的XML數據包(一個問題50) 关于IrDA在WINDOWS/NT/XP下的编程实现 一定给分啊,快点进来看看阿 ! 帮忙写个SQL语句。 静态文本框里的文字如何调整其大小? store procedure类型 数据窗口问题 编译器参数,在线等待 求sql 如何用BUTTON按钮,将一个窗体文件关闭? 非常简单的付值问题.火急,再线等待,马上送份 调用RasDia();第一次拨号成功断线后再拨就返回错误字符终止连接为何代码如下: 怎样能编写用于用ie注册邮箱、论坛账号时自动填表的软件 资源文件的问题! 一个挑战斑竹的问题!!50分 如何把压缩文件(*.rar或则*.zip)和word文档存到Acess数据库啊??? 如何可以知道访问我的网站的用户来自哪里? 甲乙辆车同时从A、B两地相向而行,第一次在距离A地200千米处相遇,相遇后两车继续行驶.到达目的地(未完后,立即返回,第二次在距B地30千米处相遇.求A、B两地相距多少千米. 菊之爱,陶后鲜有闻.用怎样的语调和语气来读 基因重组技术人与蟒蛇基因重组融合培育出蛇人具体的方法说谢谢! 鲁滨孙漂流记的作用及意义 菊之爱,陶后鲜有闻和牡丹之爱,宜乎众矣语气 国防教育征文 《鲁滨孙漂流记》中的“反复收种”和“终于”是什么意思? 过滤器芯过滤面积的计算 想成大事的女人具备什么品质 必须经历什么 Maple比Mathematica多哪些功能呀?…只用Mathematica行吗?… 六角恐龙的过滤器可以用外置循环的吗? 两首送别的诗.请写出两手关于送别内容的古诗,都是一个是人写的,一首诗写诗人送好友的情景,一首诗好友宋诗人时的情景. 爸爸的体重比李方重40%,李方重50千克,爸爸体重多少千克? mathematica能不能处理含参积分, 说两首送别的古诗 诸葛亮用来表明自己淡泊名利,志存高远的诗句 请高手帮翻译英语“我和同学们今天去书城看书时,发现已经有汪东城的新书了”翻译英语我和同学们今天去书城看书时,发现已经有汪东城的新书了 用一根铁丝围成一个平行四边形已知平行四边形相邻的边总长为15厘米这根铁丝一共有多少厘米如果改成最大的等边三角形这个等边三角行边长是多少厘米 有哪些关于“志存高远”和“始于足下”的古诗名句,越多越好. 今年儿童节,展宏用8.8元购买了甲乙两种礼物,甲1.2元1件.乙0.8元1件,其中甲比乙少1件,问甲乙两种礼物共买了()件.某地居民生活用电基本价为0.50元1度,规定每月基本用电量为a度,超过部分的 在哪下动物大战僵尸?发个网址啦 ,求 .发我邮箱也行546201570@qq.com 有植物大战僵尸2、3、4、5、6也都行 甲、乙两车分别从A、B两地同时出发相向而行,第一次在距A地30千米处相遇,到达目的地后立即返回,在距A地15千米处第二次相遇.求A、B两地间的距离. 选择合适的句子下面几个比喻句中比喻最贴切的一项是()A.这个老单身汉像木条一样瘦削.B.一轮满月正在荒野上庄严地徐徐升起,像一个赤红的大金盘.C.这个姑娘的眼睛又黑优良,像她经常戴 脑筋急转弯:一头牛,向北走10米,有向西走10米,再向南走10米,倒退右转,问牛尾巴朝哪儿?不难办. 帮忙想想遇水熔化的东西!最近做实验需要用到一种材料:1、遇水熔化2、硬度较低3、透明度较好比如肥皂、香皂这种,大家还能想出来一些吗?最好比较常用的. 给下列句子中选择正确的解释(写序号)异:1、不同的;2、分开;3、另外的,别的;4、特别的;5、奇怪(1)石钟乳和石笋颜色各异.( )(2)奇花异草不容易养活.( )(3)这是一道奇异的 "珍爱生命,远离毒品"演讲稿 遇热融化的食品水凝胶想找到一种食品几的水溶性凝胶.常温下保持果冻装胶体状态,加热至70度左右(如冲入热水)溶化溶化之后要不会再凝结的 张明有邮票120张,比小李邮票张数的2倍还多16张,小李有邮票多少张?方程和等量关系方程:等量关系式: 什么样的男人能成大事? 请问遇见温度可融化成水或者粘液的是什么?薄薄的一张膜,那是什么东西.就跟胶囊一样.会融化! 张明有邮票235张,李浩有邮票311张,要使张明的邮票是李浩的3倍,要使张明的邮票是李浩的3倍,李浩要给张明多少张邮票? 征文开头怎么写 关爱生命,安全第一演讲稿不用太长,600字左右,急用, 把人和动物的基因合在一起? 写征文怎么开头?.. 人物采访稿结束用一问一答的形式怎么写 求一《关爱生命,关注安全》演讲搞以《关爱生命,关注安全》为题写一篇演讲搞,热电厂的 如何将动物的DNA射到人体 作文我的房间 甲,乙两人单独做一件工作,如果提高工效20%,则可提前2天完工;乙提高工效10%,则可提前1天完工,那么,谁的完工天数短? 国防教育征文怎么写 关于设计自己房间的作文 表示奋发图强的四字词语最少是12个,一定是常见的!字典里有的! 国防教育的征文 作文《我的房间》女生 不要复制 带有闪闪的4字词语 小学国防教育征文 30%的同学认为,有钱就意味着幸福,金钱是幸福和快乐的源泉翻译成英文 做一个体积72立方厘米的长方形带盖箱子.长宽比是2:1,求最大表面积 国防教育征文(急求!)600字左右,最好有指导! 有钱不一定幸福怎么翻译成英文 关爱生命 主题的英文演讲稿!急~!好的给高分!英文的!这篇文章还凑合吧,但是不是最好的,感觉英文部分有的地方太普通了,有的地方又感觉不太对 蟒蛇属国家几级保护动物? 函数y=ln(1-x)+ln(1+x)的图象关于什么对称啊 读孔子云何陋之有时应怀着怎样的语气 蟒蛇是国家一级保护动物还是二级保护动物? 若函数y=f(x-1)的图象关于函数y=ln(√x)+1的图象关于y=x对称,则f(x)=? 孔子对爱情,是怎样看的 应该可以通过基因融合技术把人和杂交品种有毒的巨蟒基因融合成为蛇人我不要求像X战警那样我只要成为变种人就可以了我想培育和蛇人出来我相信铁能成针失败是成功之母我要集中大量的 奥巴马与默克尔通电话 否认情报机构窃韩国特种部队美国加州跳伞宣传独岛 (尼泊尔“世界最矮的人”的生活 (组图美女孩儿公园内挖到3.85克拉钻石 中印签署边防合作协议 习近平提中印关梅德韦杰夫访华花絮:中俄总理相约散步伦敦唐人街罢市抗议“歧视性执法”冷空气今起渗透影响 杭州明后天早晨稍美核导弹值更官开门睡觉英王室将拍四世同堂照泰咖啡店主挑战星巴克智能手机或将遥控空袭韩首名宇航员学MBA挨批京津冀等六省联防大气污染 北京抓八大韩亚空难最后一名留医伤者出院 共留医美国“监控门”又酿新风波 德法意等国默克尔电话疑遭美安全机构窃听 致电奥拯救英国最胖男子澳科学家“查叶探金”印度灾民仅获1美元政府补偿美欧操纵非洲转基因论战用法治统领和推动社会建设货车失控连撞数栋居民楼福田部署全国文明城市创建工作关于龙岗区[宝龙工业城地区]法定图则打造中俄教育交流合作成功典范旅客冒用他人身份证乘高铁被查处儒学传播需要多元融合支持深港交易所加强合作外交部要求英方停止干涉香港事务河南公诉4名厅官南海大道上违法132次 粤BB0L9碳市场首次引进境外投资者我国将埃博拉纳入检疫传染病管理树立言必信行必果施政新风愿就MH370向马方提供帮助10名外籍人才获颁“福田国际友谊奖”口岸客流高峰预计今日出现胡润国际财富领袖论坛首次在深举行韩国贸易投资振兴公社 高层访深拓展经动真碰硬解决突出问题节前交通高峰昨15时后即至
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘