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

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示例程序,然后你就可以学习更复杂的协议了。
WEB开发中将数据库记录转换到EXCEL表格文件xls供下载 F#是什么语言 函数式编程语言F#:基于CLR的另一个头等编程语言 编程获取Google PR值方法集锦 第一个F#入门程序Hello world 在F#中将函数作为一等对象的值 PHP获取Google PR值 ASP.NET(C#)获取Google PR值 android.appwidget类剖析 Android NDK之JNI使用例子 RemoteViews - Android Widget开发入门 ASP.NET如何用正则表达式得到网站页面中的所有链接 PHP实现图形验证码案例(1) Android Widget开发实例-电量监控 Android自带Widget - Clock指针钟表源代码分析 C#实现文件批量改名工具 PHP利用Google Chart API生成饼图 PHP操作SQLite数据库 PHP利用DomDocument创建XML文件 ASP.NET如何加密/解密URL网址 如何使用C#读取csv文件 三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图 使用C# ASP.NET以FTP客户端方式下载文件 ASP.NET如何用C#代码检测手机浏览器 使用C#读取上传的Excel文件 新版本SQL Helper类 C#使用iTextsharp生成PDF 在.NET里用iTextSharp库生成PDF文档 用itextsharp将ASP.NET页面导出到PDF中 什么是JQuery-JQuery API jQuery入门指南-JQuery API 如何禁用ie选项中的“显示友好的http错误信息” 接了一个小小的酒店管理系统,问一下,值多少钱?(可别说我做坏了市场:)) 程序员考试的资料在哪下载?(.pdg的文件用什么阅读?) 我下载了JDK1.4.1_03安装以后JDK目录里没有1.3的Javac文件呀? 新手的问题(asp的源代码): vector&父类子类的问题 单片机如何实现霓虹灯控制,谢谢。 ASP操作oracle数据库,是不是只能用SQL语句实现 哪里有介绍NAT(网络地址转换)原理的网站? win2000下,的计算机管理--磁盘管理--选中c盘--右键--属性--工具--查错,选中扫描并试图恢复坏扇区........... Session会无故消失!! 请大家注意FAQ的提交! ---如何在linux下编译IDL文件--- 求Rational purifyplus for Linux 的license 简单sql语句问题 VB编译好的程序为何不能在没装VB上运行? vector&父类子类的问题 有关三角矩阵乘法 如何编写ASP类? servlet调用Oracle,如何使用jdbc直接进行连接?高分相赠 我的2000 pro 总是出现超频保护 大家快来接分了!!!! 怎样让一个窗体总是在桌面的最前面,不会被其他程序的窗口挡住? 送分啦 dshow的入门级问题,请指教 那种开发工具开发效率较高 xp的问题 "处理中的数据超过允许的极限"是怎么回事? 为什么我的.net在建web工程设置断点后无法调试,加上了button后无法显示。谢谢了。 我现在大概有10万资金,可以做什么投资回报比较大呢?? 请教关于动态控件内存释放问题~(老问题新谈,高手请进)~~ SQL的一个问题!(高手请进!!!) 发个笑话,爆笑(转贴) 通过远程视图不能修改记录 cet-8跟英语专业八级是一回事吗? 关于图象处理 急急~~!!在哪儿能下载Flash插件呢!! 如何设定一个窗体的弹出广告在找开后自动关闭 水晶报表一对多问题?? 一个关于表单提交的超级简单,超级奇怪的问题? 怎样实现vb6中datagrid控件的打印 SQL select 语句如何对images进行操作? 怎样实现vb6中datagrid控件的打印 水晶报表一对多问题?? 使用oracle传递日期型数据问题 好好急啊 如何当数据集的纪录移动的时候,触发一个事件,以响应我需要的作的工作?? 有关括号配对,在先求救! c#中制作安装程序,如何包含.net框架程序。 在制作rpm包的过程能不能进行写文件操作,也就是说把我要运行的应用程序的路径写到某个脚本文件中去? 使用VC编一个算法遇到的调试问题,紧急求救! 硬盘分区的问题,help 如果(x+a)(x-a)=x^2+bx-6对于x的任何值都成立,那么a、b的值分别为a=3,b=5 B.a=3,b=1 C,a=-3,b=-1 D.a=-3,b=-5(x+a)(x-2)=x^2+bx-6 = 刚才题目打错了 该怎么写生活日记 王八蛋是什么样子的? 已知a^2+b^2=1,对于满足条件0≤x≤1的一切实数x,a(1-x)(1-x-ax)-bx(b-x-bx)≥0恒成立,当ab乘积最小时,求ab 生活日记要怎么样写 用VF求10000000以内质数 已知f(x)=ax*2+bx+c,当x属于[-1,1]时,都有-1≤f(x)≤1成立,且a+b=2,则a-b= tpo9综合写作的听力文本! 王八蛋是谁 (1/2)选择题 当x不等于负的b分之5时 ,(-bx -5 ) 分之(a +x ) =2成立 ,则a的平方 -b的...(1/2)选择题 当x不等于负的b分之5时 ,(-bx -5 ) 分之(a +x ) =2成立 ,则a的平方 -b的平方等于 A TPO9的听力是不是特别难啊?我总共扣了7分算是怎么样的水平啊?0714考的话现在应该做些什么准备啊? 怎么有效提高生物和地理成绩别说废话 说点有用的我知道学 有什么好方法 怎样用列举法求双胞胎生两男、两女、一男一女的概率各是多少? tpo9 听力的section1为什么tpo9 听力的section1 第三篇讲shrub的第一个选项选A啊?不是开始就说的是气温影响的吗?我认为是b 寒假生活日记 600左右 罗尔定理成立的条件罗尔定理的条件之一是在区间上存在两个相等的函数值点,但这两个相等的函数值点必须是区间的端点吗? 3男2女 上台抽奖 随机抽两个人 列举所有的基本事件 在等式y=ax的2次方+bx+c中,当x=0时,y=0;当x=1时,y=1;求当x=2时,y的值. 表达想念某人,做其他事心不在焉的诗句 g(x)=3x^2-bx+b>=0在[-2,1]上恒成立求b的取值范围,计算过程详解 已知等式y=ax的2次方+bx+c,当x=1时,y=3;当x=-1时,y=1;当x=-2时,y=9.求a,b,c的值 有谁能够将C#类中的get 和set 函数的具体用法说透一点呀?我在C#的属性中使用了get 和set 函数,但是我看不出它的具体作用体现在哪!谁能将它说得清楚一点啊! g(x)=3x^2-bx+b>=0在[-2,1]上恒成立求b的取值范围, 哪些动物是畜生 C#语法的问题 get set的用法public class Users { private int _userid; private string _username; private string _userpwd; public int UserId { get { return this._userid; } set { this._userid = value; } } public string UserName { get { return this 什么是生活日记寒假写生活日记,却不知写什么.Help me! 高一的几个生物填空题,可我没学过 关于C#中get:和set;用法在类中定义属性public string name{get;set;}和private string name;public string Name{get { return name; }set { name= value; }}有什么区别.感觉都是封装字段. 要几篇生活日记 畜生和牲畜 请问现在月球发现了水分的话,是否就能居住呢? 生活日记结尾怎么写马上就要 杭人游湖 翻译 若即若离的爱我遇到了一个她,我发现我喜欢她,爱她.可是我们若即若离的,让我感觉到不安,我害怕失去她,又总是有可能失去的感觉.我的神啊,救救我吧,人生得李雪此女,别无它求.我不要,更不 来两篇生活日记字数300左右 可以抒情讨论 畜生与牲畜区别在哪里? “全月应纳税所得金额”指全月总收入减2000元后的金额.项老师上月交个人所得税90元,算老师上月收入级别 全月应纳税所得金额 税率1 不超过500元部分 5%2 超过500元到2000元部分 10%3 超过200 折线统计图不但可以表示( ),而且( ). 畜生和牲畜有什么区别 希望大家可以推荐几本关有哲学的书!想有一天去夏威夷旅游 不知道出国需要什么手续和条件 还有应该注意什么? ∫x/(4+x)^0.5 dx如题! 日本人属于畜生还是属于牲口? 已知W1(t0)=W2(t0),W1(t0-△t)>W2(t0-△t),求当自变量的变化由t0-△t到t0时,W甲和W乙谁大(W1属于W甲,W2属于W乙) ∫((X+5)^4)dx 不定积分 我记的有个化学知识,记不清了有关活泼金属与热水冷水有关他究竟是什么,还有这类反应中热水都加剧反应吗,有热水减缓反应的例子吗 变化率的数学问题有一个等边三角形,边长为20厘米.其顶点每秒向对边的中点以1.5厘米/秒的速度靠近,假设其保持为等边三角形.当三角形消失时,求其消失时刻面积的变化率.谢谢~ ∫(x^5+x^4-8)/x^3-x dx求不定积分具体过程 金属Mg和水反应吗?如果和水反应,那么Mg和冷水以及热水反应有没有区别? 数学,瞬时变化率是什么? 英语. 这高一生物题的两个空怎么填?下列是探究pH对酶活性的影响的实验材料:淀粉酶溶液,蒸馏水,NaOH溶液,可溶性淀粉溶液,盐酸,菲林试剂,双缩脲试剂,苏丹3染液.试管1:新鲜的淀粉酶溶液,蒸馏水, 数学的瞬时变化率怎么计算? 25.谁能帮我全部 怎么写.高一生物 若(x-2)(x+a)=(x方+bx+6),则a.b各等于多少 设函数f(x)=ax+4/x(x>0),a∈正 R (1)当a=2时,用函数单调性定义求f(x)的单调递减区间 (2)的两个空 已知x=-1时,a x的三次方加 bx等于1成立,那么x=1时,a x的三次方加 bx-3等于多少? 设函数f(x)=x-2/x-1 1.用定义证明函数f(x)在区间(1,正无穷)上是单调递减函数2.若f(t2-t+2)-2<0,求实数t的取值范围.(根据函数单调性来解答)重点是第二问! 王八蛋是什么 中国驻日使馆表彰见义勇为留学生印将建高达182米世界最大雕像 高约印度古吉拉特邦建世界最大雕像 暗贬尼俄专家称俄罗斯人无法仅凭工资购买一套外交部:望澳方重视对华关系 视中国发律师称斯诺登可在俄境内就德国遭美监听中方对目前阶段销毁叙化武相关决定执行嫦娥三号月球探测器完成总装 正进行飞卜拉希米称日内瓦会议有望于数周内召开外交部:中方将与上合组织各方一道进一俄将向美驻阿富汗军队追加提供30架米俄一法庭发生爆炸致2死2伤公交司机因车速慢被打 打人者自称是警福州破获虚假恐怖信息致航班延误案 1《新快报》社高层调整 社长、总编及副日俄防长会谈当天俄军机飞临 日战机紧金正恩或未见来访蒙古总统 “首秀”留经济观察:上海自贸“试验田”承载的财尼日尔将为92名被困沙漠渴死移民进行外交部:中方将与上合组织各方一道进一亚太地区主要股市涨跌不一继淡水阿嬷 王如玄小学老师写信相挺墨西哥大毒枭被捕现场照片曝光 满地枪费德勒受流感困扰无缘新赛季首冠 赞拉纳达尔盛赞小德:没见过谁能将网球打成深度解读P2P监管细则意见稿下午激烈“拉锯战”!99财富新年寄语:让信任大于财富外地人在上海怎么考驾照更强更快更智能 关键词解读CES手机针对加拿大学签、工签注意事项整理翡翠珠宝证书这样出来的?原来证书不能供强需弱令油市“伤筋动骨” 原油淡然《星球大战》鹿晗:愿原力与你同在哏都那些有钱都不一定能吃得上的美食,马鞍山最霸气的几家面馆,冬天就要这么99财富“霸屏”纳斯达克 向全球华人让厨房整洁漂亮的几件小物一个女人下跪的图刚出,就被转疯了!有一种努力叫:靠 自 己又一位不差钱的走了,死因竟是颈椎病!林则徐的《十无益》格言,受益匪浅
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘