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

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示例程序,然后你就可以学习更复杂的协议了。
迪游信息科技CEO张晓雷:中日游戏面面观 百余款智能电视创意类应用参赛角逐 Top13 App新鲜出炉! 微信公众平台开发——如何保证access_token长期有效? 拼的就是速度!超快HTML5 2D渲染引擎Pixi.js 一周消息树:百度“涉黄”遭警告,网盘内容审核的四种方式 微信开发商现状调查:接口限制成主要困扰 行业需求多样是最大难点 小米:海外扩张需谨慎,信息安全或成最大掣肘 AMD FX系荣耀归来 或成大众新宠! 脑洞大开:《80天环游地球》同名游戏诞生记 2014微信开发者大会 最后30个参会名额! 林仕鼎创业产品“云校”正式上线:让教育个性化、多元化、均衡化 14岁少年开发者:伍兴云的智能家居“梦” Xcode 6 Beta 6发布闹乌龙,着重改进Swift语言 当API遇到云平台,开发者面临的新抉择! 《近匠》欧朋流量宝,工具类应用开发之道 《近匠》Bmob:免费无限制的公有云服务 MDCC应用征集最新动态:3D手游成热点、硬件种类丰富 闪迪Ultra II SSD:采用TLC闪存,最低价为79.99美元 现有技能不浪费!基于Titanium的跨平台游戏引擎Platino 跳过开发者,专注补Bug的iOS 8 Beta 6悄然发布 集群管理可以很简单,Google又放大招 应用内直接打车:Uber面向第三方开发者开放API 百万美元巨奖!英特尔启动感知计算挑战赛 IBM 2014技术峰会在京开幕! OpenGL 4.5规范标准发布,大大提升API性能! 更萌更贱:Flappy Bird开发者推虐心新作Swing Copters 学习的革命:AR增强现实遇到儿童应用 颠覆旧概念,IBM Bluemix开启云开发时代 专访企业QQ SaaS团队,谈企业级LNMP架构设计 《近匠》Coding:将软件开发搬到云上 小米与美视频游戏服务Ouya合作 进军国内客厅 错在哪里? 如何才能实现将ListView的一列拖到另外一列的位置? 在VC#中订阅消息要手工输入,为什么不做成VB一样?有简单方法吗? 请问网吧管理软件是如何使屏幕变暗,并显示自己的对话框,禁止其他操作的? 第一次用VB,请指教 多线程中如何申请一块存储空间 Code Guard是什么东东?在线等待,马上给分! 这个错误是什么原因啊? 请问怎样获得默认打印机名! 哪位大虾能给小弟一点有关汉诺塔问题的资料呀?! ShellExecute(this.Handle,null,"c:\\",null,null,1)问题再探 PB6.5如何实现选择文件路径对话匡?急!在线等待。 为什么下面的enum定义要有一个方括号? dot menu是什么意思? 请教大侠为什么(333)这句不执行 如何将olecontainer载入的word文件全部显示,而不只显示第一页? 简单问题! 高手帮忙!如何通过服务器来自动查找、替换客户端文件 为何timer控件失效? @这个字符在C#中有何具体意义?不解 如何将sql server的检查约束延迟到Commit时 ado连接sql库问题 为何无法ping自己的地址呢? 滚动条判断 单个窗口程序可以运行,但是几个窗体连在一起就不可以了,好像是多线程的问题,请教各位 关于DBgrid再次求救 今天我好失败——斑竹过两天删除吧,让我宣泄一下 哎呀!!各位何必拉帮结派呢!!!这样不好啦!!影响水园大团结啊~~~没有加入帮派的人就很难在水园呆下去啦。。猪猪。。只有和他们沦为 CreateBitmap 与 CreateCompatibleBitmap 弹出一个窗体但是又不抢占其他窗体得焦点,怎么办? 利用DW-MX制作ASP.NET程序教程! vc中 调用 VB dll 时参数类型如何确定? 谢谢! 如何才能得知当前路径?比如VB的App.Path? Conn.OpenSchema怎么得到字段的信息? 一个进程写在共享内存中的数据被另一个进程读出去后的问题 大家开心开心吧! 笑过后体会体会...... asp与数据库连接的问题?急,急!(在线等待) 大家是怎么查VCL类库的类及函数的? 在线程里有无限循环时,好象不跳出循环就无法终止线程,是吗 UNIX的线程有没有类似Windows线程的消息队列和消息机制? 哪位大虾知道如何在网页中快速刷新显示后台计算的数据? 请问有谁知道PrinterResolution怎么和打印机对象连在一起呀, 偶有一个惊人的发现! 对话框中的按钮我怎么让它继承我自己的类? 请问有谁知道PrinterResolution怎么和打印机对象连在一起呀, 装了腾讯的浏览器现在删了 可是用cterm点击里面的网址还会调用腾讯的浏览器 如何修改注册表 那个键值? 电子邮件的问题 怎样给为我解答问题的注册用户打分? 谁做过这样的新闻系统! 为什么RealPlayer放有些网站的流媒体文件时会出错? 请问什么地方有软件开发标准。如国标,国军标等。 某面粉厂有一容积是24立方米的长方体储粮池,它的长是高或宽的2倍,当贴着他的一最大的内侧面将面粉堆成一个最大的半圆锥时,这堆面粉的体积是多少? 氯化镁与氨水反应可逆吗? 新日电动车充电消耗大概几度电我买的是09年新日踏板的电动车,不要问我电池功率啥的,我的问题不需要你回答的多仔细,你们就说下一般新日踏板电动车充10小时大概会消耗几度电, 用matlab求解矩阵a的最大特征值及其特征向量,并将其特征向量归一化,对矩阵a进行一致性检验.速求a=(1 1 5 5 7 7 ;1 1 5 5 7 7 ;1/5 1/5 1 3 5 5;1/5 1/5 1/3 1 3 2;1/7 1/7 1/5 1/3 1 1/2;1/7 1/7 1/3 1/2 2 1) 氨水于氯化镁溶液反应的离子方程式 为什么磁体内部和外部磁场的方向是相反的? 送元二使安西的主要内容以及思想感情是什么?要概括些的! 磁场的方向就是磁体在磁场中受力的方向(参见补充说明)磁场的方向就是磁体在磁场中受力的方向,且磁感线的方向就是磁场的方向,那磁体的南极就不会与另一个磁体的南极所吸 如何形象的表示磁体周围空间各点的磁场方向和强弱 王维的送元二使安西是什么思想感情 氢氧化镁饱和水溶液中加入几滴氢氧化钠后,氢氧化镁的溶解度会发生什么变化?pH值会发生什么变化? 磁体内部的磁感线方向与磁场方向磁感线是虚拟的闭合曲线,那么在磁体内部的磁感线方向就是由S到N,此时如果小磁针放在通电螺线管内部,依然是小磁针的N指向螺线管的S.因为小磁针的北极 送元二使安西的感受是什么 要构成南极海洋生态系统 图中还缺少一种重要的生物成分是 如 组成生态系统中的非生物包括什么 绿色植物的蒸腾作用带走了植物体中百分之九十九以上的水分.你认为对当地气候会有什么影响? 若要组成一个完整的生态系统出图中所示生物外不可缺少的成分是 辅音字母+o结尾的部分名词有哪些 绿色植物的蒸腾作用帶走了植物体中大部分水分,你认为这对当地气候会有什么影响? 凝结的意思是什么 太阳能里的水是否可以吃 一定量的理想气体,经历某过程后,温度升高.则根据热力学定律可以断定:一定量的理想气体,经历某过程后,温度升高.则根据热力学定律可以断定:(1) 该理想气体系统在此过程中吸了热. ( 物态变化 凝固现象都有哪些例如:寒冷的冬天,湖水结成冰 除了这个还有那些?还有液化,汽化,凝华,升华这些现象 太阳能里面的水可以吃吗? 物理题中“理想气体”是怎样一个概念 氢氧化铁和硫酸先反应还是氢氧化镁和硫酸先反应 太阳能水可以喝吗? 为什么氟利昂制冷系统自动化程度比氨制冷系统更高? 氢氧化镁转化成氢氧化铁的方程式 磁体与磁场磁体的同极为什么互相排斥?不同级互相吸引? 理想气体 两端开口、粗细均匀的U型玻璃管开口向上竖直放置,两段水银柱中间封有一定质量的理想气体,其液面高度差如图所示,则如果向右管倒入少量水银后,图中的 将 (填“增大”“不变 氢氧化镁与氢氧化铁是否共价(已知氢氧化铝共价)对于金属氢氧化物有没有规律判断呢 怎样利用12v的直流电源,才能做一个加热器,要求温度230的恒温. 制冷系统中是不是只有氟利昂系统才用干燥器?氨系统不用吗? 氢氧化铁和氢氧化镁和铁在硫酸中反应有没有先后顺序/ 为什么冰箱移动了位置,不可以马上接电源?厂家说要等一个小时才可通电. 一道物理题目 关于理想气体的直玻璃管中部有一水银柱,两端封闭,管水平放置时,两端空气压强恰为76cmhg,水银柱在管正中,将管竖直放置,水银柱上部空气长恰为下部空气长的两倍,则管内水银 用平衡移动原理解释硫酸铁溶液与氢氧化镁反应生成氢氧化铁的原因 电冰箱运行过程中移动位置是否会损坏电机?美菱的电冰箱 运行了一段时间后发现地面有点倾斜导致冰箱不是很直 于是移动了一下位置 顺便再一边的脚下垫高了一些 请问会不会损坏冰箱啊 冷库采用氨制冷系统和氟里昂制冷系统哪个好? 一般的电动车充一次电后能走多少公里?能否介绍一款充电后能跑80公里以上的电动车呀? 新冰箱为什么要4个小时之后通电 一个圆柱形游泳池,直径是40米,深2米.(1)这个游泳池占地面积是多少?(2)在游泳池的一周围上护栏,护栏的长是多少米?(3)挖成这个游泳池,共需挖土多少立方米?(4)在池内的侧面和底面 理想气体物理题容器甲,乙用水平玻璃管连接,管内一段水银柱把气体分为左右两部分,甲乙两部分气体的厨师温度为27℃和37℃,现将两边气体的温度同时升高10℃,水银柱将怎么样变化?图是左甲 48伏的电动车充1小时要多少电 一个底面直径是40米,深2米的圆柱形游泳池,水深1.8米.先在储水多少立方米 对于氟利昂制冷系统,为什么需要设置干燥装置?若氟利昂制冷系统中发生“冰塞”,最有可能发生在管路中什么地方,为什么? 物质的三种形态和各种物态变化 一个圆柱形游泳池,直径是40m,池深2m,它能容水多少立方米?如果它的内壁和地面贴瓷一个圆柱形游泳池,直径是40m,池深2m,它能容水多少立方米?如果它的内壁和地面贴瓷的面积是多少平方米?要的 空调的制冷系统是怎么,氟利昂? 求“记承天寺夜游”的全文意思与字词解释 一个圆柱形游泳池,底面直径40米,深2米,这个游泳池的占地面积是多少?在池内的侧面和池底贴上瓷砖,需要多少面积的瓷砖 物理的物态变化中的六个概念的生活运用的例子,记住了概念可是总不会运用咋办 的加点词解释请注意,是处2上学期语文第17课 某面粉厂有一个容积是16立方米的长方体储粮池,它的长是宽或高的2倍,当贴着它一最大的内侧面将小麦堆成一最大的半圆锥体时,求这堆小麦的体积. 冰雪加盐后为什么融化会更快如题 记承天寺夜游生字词 某面粉厂有一容积是24立方米的长方形储粮池,它的长是宽和高的两倍,当贴着它的一最大的内侧面将面粉堆成一个最大的半圆锥(如图)时,这堆面粉的体积是多少?(答案清楚些,好理解些) 磁场的范围是不是说明了磁力的吸引力的范围? 记承天寺夜游的课下注释人教版.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘