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

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示例程序,然后你就可以学习更复杂的协议了。
新威胁:IE新漏洞允许网站跟踪鼠标 少编码多思考:代码越多 问题越多 [简讯] JDK 7u10发布 修复安全漏洞 搜狗茹立云:为何搜狗语音助手比Siri更精准? BlackBerry 10最终版SDK Gold发布 谷歌地图正式登陆App Store 为开发者推出SDK 你的云数据的三个最大威胁 公开叫板:Google不打算推出Win8版Gmail和Drive APP备案风波:开发者何去何从? 32位和64位的JVM 我该选择哪个呢? 黑莓“Got Game Port-a-Thon”活动将于12月22日在北京举行 专访Moti Joseph:浏览器安全的经验之谈 四大开源云平台的命运基因 FPS移动游戏:画质不是第一位,操控才是死穴 微软2013年的五个安全预测 应用成武器 王淮,大城小胖论辩HTML5 局部有小雨 技术人员创业后就不再适合继续编码了? Google Dremel vs Apache Hadoop 低功耗之争:英特尔 VS ARM NEIC-诺基亚体验创新中心 助力开发者创享新移动互联时代 Google地图主管Daniel Graf:新设计,新目标 浴火重生:OpenFeint创始人推开源平台OpenKit 紧随AWS数据仓库服务 Rackspace力鼎Cloudant 创业者谈:畏惧失败,但也要拥抱失败 谷歌赢得一场战斗 苹果能否赢得战争? 走进大学校园:是什么让学生成为独立开发者? 移动周报:为什么说独立开发者才是光明康途? MapFan eye:看日本地图导航应用的新玩法 数据会被清空:部分三星、魅族手机存安全漏洞 IE10简化文件访问 支持FileReader API 从MySQL迁移到MariaSQL Wikipedia力求开放 请问Winamp风格的一起移动窗口的实现,MoveWindow()/SetWindowPos()不完美 (50分) T2W(LPTSTR lp)为什么编译时报错:_lpa undeclared identifier? 今天晚上约了五个网友在一个地方见面,不知道会出现什么情况??思索中。。。。。。。。。。。 如何在delphi中显示word文件? paradox数据库表导出excel的问题 如何在delphi中显示word文件? 一个关于文件读取的问题 有没有办法更改ClientDataSet的Delta? HELP ME!!!怎样用JAVA作成系统托盘 有没有办法更改ClientDataSet的Delta? 谁能告诉我这样一个问题???pagecontrol的底面颜色怎么改变?????? 请教DWORD的用法 主键。。。。这下傻乐 散分阿 问题没有解决,再给五十分! 当鼠标移至一个VCL上如LABEL的时候其颜色为改变,请问用何事件?初级问题,前十个都有十分 那里有 Install shield?? 怎样让一个程序自己关闭后重启?? 请教大家一个低题的问题? 求救 怎么通过程序设置一个CView视图的滚动条?? 怎样在delphi中用sakemail对要验证的SMTP服务器发邮件? rdoRegisterDataSource建数据连接 的network参数值有那几个? 两个多线程的问题,大家都来看看 在那个网站可以查考研的分 我的程序不能对sql2000进行更新,为什么,我用jbuilder6,请高手赐教!!! 怎样修改SQL Server的时间格式? pb8_DATAWINDOW问题!高手HELP ME!!请帮主来帮忙!! 哪里有《c语言手册》卖或下载? pb8用cell连接sybase12。0时用的连接字符串,当然是没有成功,有解决办法吗,sybase本身带ado驱动,但是不知道如何写。 用sql语句,怎样取最后10条记录。 想在北京找个java方面的工作,好找吗? 请问ISA Server 中如何设定某个局域网IP访问Internet的带宽上限? 请教大家一个低题的问题? 用InterDev创建工程的时候为什么总是提示Unable to contact web server http://localhost? 偶的100分就这样没了????!!!!!!! 调查:一般多长时间将你在 download.com 上的程序升级? 请问谁有解三元一次方程的程序,能给发过来吗? 检查表单这样为什么不行? 如何看别人的源代码??? 各位,那位用过华表插件...求救,怎么嵌入html? VC下基于ATL的数据库编程问题,很容易拿分的。 请问怎样才能向数据库插入当前日期,格式为14位字符串yyyymmddhhnnss 怎样从html页面中向ActivXForm传参数,在ActiveXForm中又如何接收? 如何控制 Text 控件中文本的行间距? 如何看别人的源代码??? 一些代码... 那位知道 Microsoft ODBC for Oracle 的驱动程序在那里能下载 ::)access数据库中字段是日期和时间型,用DAO编程应该用什么类型的数据才能填充数据库中的字段。 为什么?(大虾、菜鸟...统统欢迎) 在C/C++ 程序中怎样延时? 同一溶液中,有氨根离子,碘离子,钡离子,氯离子,则该溶液的PH和介质?介质有没有可能是次氯酸 为什么表面烧黑的灼热铜丝接触到一氧化碳后会变为红色?我们现在还没学,但这个问题我非常想搞明白耶! 为什么汞洒出后要用硫呢? 双氧水指的是什么? 过氧化氢加热生成水和二氧化碳属于什么反应类型 为什么汞洒落地面时要撒上硫粉? 石灰水与氯化铜溶液反应的化学方程式 过氧化钠怎么能反应生成过氧化氢? 什么叫硬质沥青,甘油沥青? 在氨水中加水,氨根离子的浓度是增大还是变小? 在氨水中加入NaOH 氨根离子的浓度是增大还是变小? 还有这个电离程度分别怎么改变啊?你第一个说得不对哦加水应该是增加了OH-的浓度那么反 威猛先生厨房重油污净的真正成份是什么?用来洗碗对人体有危害吗? 水银掉地上怎么处理 过氧化氢是什么之最? 从电解水实验得的结论可以说一个水分子由两个氢原子与一个氧原子组成吗 水银掉在地上怎样处理? 过氧化氢是什么? 五氧化二磷与水反应生成什么 收集散落在地上的废汞用硫粉撒在地上之后再怎么办啊? 怎样除不锈钢上的锈我是做五金加工的 发现不锈钢高温加热后有一些黑 砂轮磨得办法不太见效 电解水实验步骤 酒托是什么意思 用什么方法可以去除汞的毒性 进行电解水的实验时,所观察到的现象A.正极产生的气体比负极多 B.负极产生的气体比正极多C.正极产生的气体可被点燃 C.负极产生的气体具有助燃性 甘油一酯 甘油二酯 性质谁能给介绍甘油一酯和甘油二酯的性质,这两种物质是否溶于甲醇? 将铜丝灼烧变黑后立即插入下列物质中,铜丝质量变大的是A.H2SO4 B.C2H5OH C.NaOH D.CH3COOH正确答案是c,请告诉我为什么,包括其它选项的质量变化情况,谢谢 在电解水的过程中,发生变化的粒子是( ),保持不变的粒子是( ),生成的新粒子是( ) 氯化铁与硫氰化钾的反应方程式 把铜丝灼烧变黑后,立即放入下列物质中,铜丝变红且质量不变的是A稀HNO3 B CH3COOH溶液 C C2H5OH D CH3CHO 米奇不锈钢保温杯为什么会生锈 氯化铁与硫氰化钾反应的化学方程 某课外活动小组,欲探究金属的活动性及与氢的位置Fe>H>Cu>Ag,他们找来他们找来铁铜两片金属,一瓶硝酸银溶液和一瓶无色溶液,完成了探究实验,请利用所学知识判断1无色溶液是2写出验证Cu>Ag的 五氧化二磷溶于10℃水,生成什么? 青田石保养时用的石蜡是什么石蜡?可否告诉石蜡的名字什么的?我现在很急需要这个.我想知道的是青田石保养用的石蜡是什么石蜡?再有就是保养的基本方法是什么谢谢 304不锈钢门,生锈(锈斑)帮客户在佛山定做的304不锈钢大门,使用不到3个月,其中有两条门扇下面三分之一出现生锈情况,同时门框锁孔那边也出现锈迹,坑爹的是厂家各种推脱,现在是有苦说不 怎样测出水玻璃中二氧化硅和氧化钠我是菜鸟麻烦大家说的具体一点 如何清除奇石表面的石蜡? 烹饪时如何合理应用饮料酒 永康304不锈钢门生锈了怎么办 在电解水试验中需要少量加入什么?因为什么? 酒精锅就能做的鱼料理 1.电解水制氢耗电量有多大?2.如果功率是100W,那么制1立方米(SPT)的氢气要多久?燃烧1立方米(SPT)的氢气所放出的能量,可供一辆普通汽车行驶多少路程? 酒托是怎样的?劲舞团里面有找酒托这种行业,到底这种行业 有没有犯法呢? 意大利料理 菜式与配酒Calamari fritti,Lumache Trattoria,Linguine Pescatore,Spaghetti Calabrese,Scaloppine Gorgonzola,Tiramisu,Oysters from Prince Edward Island,Foie gras,Cod fillet,Steak tartare cut with a knife,Shank of wild boar,Tarte Tati 正极负极是怎么样规定的?电解水生成氢气一边是正极还是负极 没听过这个词 ph=1.4的酸的氢离子浓度是ph=5的酸的氢离子浓度的几倍? 醋酸溶液加水稀释,氢离子浓度的变化曲线是怎么样的?实现增大后减小吗?等体积等pH的盐酸和醋酸与等量氢气反应,氢离子浓度各自是怎么变化的?速率各自是怎么变化的?请把这三个的图像分 酒托是什么意思 知道ph,怎么求氢离子的浓度啊 五氧化二磷+水(热)=?五氧化二磷+水(冷)=? 什么物质能发生质壁分离复原(像甘油一类的都有什么) 炼焦煤在哪个朝代开始的 为什么 将PH=14的醋酸稀释后 溶液中所有离子浓度都降低吗1为什么 将PH=14的醋酸稀释后 溶液中所有离子浓度怎么变化的?2为什么在NH4HCO3溶液中,有c(NH4+)+c(NH3.H2O)+c(NH3)=c(HCO3-)+c(CO3 2-)+c(H2CO3)成立. 丙三醇性质 煤被居民用作燃料是在哪个朝代?A.北宋 B.唐朝 C.元朝 D.金朝 不锈钢门为什么不会生锈 甘油的性质特点是什么 双氧水是什么?/如题顺便问一下氧在化学中是O它和O2(欧2)有什么区别? 硫酸铝溶液和偏铝酸钠溶液反应生成什么? 汞洒落后,为什么要撒上硫粉?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘