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

设计Chat程序 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
设计Chat程序 -VB资料
用WinSock设计Chat程序

摘要
  随着Internet的蓬勃发展,网络界面的交流使我们能够即时收到各地所发生的各项信息。我们在使用各种Browser浏览各网点时,只要Server能提供Chat(闲聊)的服务项目,我们就可以通过Browser所提供的Chat程序与网络上的其他使用者即时对谈及交流心得。本篇文章通过Visual Basic 5.0所提供的WInSock control,设计一个Chat应用程序。我们通过Client及Server之间的文件传输,可以了解Chat程序的工作原理。

WinSock control简介
  WinSock是windows系统提供的一种网络文件传输协议。以往我们使用WinSock设计程序时,必须调用系统提供的API来完成;但是在Visual
Basic中调用API,因涉及参数传递类型,用起来并不方便。Visual Basic 5.0 提供WinSock control简化我们的设计流程。它可以利用User Datagram Protocol(UDP)或Transmission Control Protocol(TCP),来设计网络的Client-Server 程序。
  TCP是一种Connection base的Protocol,在文件传输时会先行建立Link,通过Link可确保文件传输的正确性;UDP则是一种Connectionless的Protocol,它在传输文件时不会确保传输端的文件能够正确无误的传送到接收端,所以当我们使用UDP protocol时,我们通常要自己作接收确认的工作。
  UDP protocol看起来好像比较没效率,其实不然!UDP protocol有一个好处:当文件很小,或我们要做网络boardcast (广播)时,会比较有效率。 所以了! 当我们利用WinSock设计程序时,首先要依自己的需要,决定使用那一种protocol。本文将分别教您使用TCP及UDP Protocol来设计Chat程序。

  以TCP设计Chat程序

Step 1:找出Domain name及IP address
  在“我的电脑”中选择“控制面板”。Double click“网络”选项,选择“标识”,您将会发觉您的计算机名称、工作组名等信息。将它记录起来,我们稍后会用到。

Step 2:设计TCP Server程序
  在File选项中选New Project建立一个新的工程,在屏幕上会看到许多选项,如ActiveX Document.EXE、ActiveX Document.DLL、ActiveX.EXE、ActiveXControl等,选Standard.EXE。
  接着在Project下选择Property属性选项,在General选项下将ProjectName改为TCP-Server,并将Form名称及Caption更改为Server。在屏幕的Form上加入一个WinSock control,取名为Tcps;加入两个TextBox control(Outtext、Intext),并在两个TextBox前加入两个label,分别将caption改为Outtext、Intext。

〈TextBox〉
Name
------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

〈Label〉
Caption
------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

  在Form_Load()中加入以下程序代码,这个动作是设置好我们Local的传输端口,并到接收的状态:
Tcps.protocol=0-scktcp protocol
Tcps.LocalPort = 1002
Tcps.Listen

  双击Tcps,在Tcps_ConnectionRequest(ByVal requestID As Long)中加入以下程序代码,这表示winsock接受了连接请求:
Tcps.Accept requestID

  双击Outtext到Outtext_change(),加入以下程序代码,当Outtext内容改变后,文件就会自动送出:
Tcps.SendData Outtext.text

  在Tcps_DataArrival(ByVal bytesTotal As Long)中加入以下程序代码,这是用来把所接收的文件显示在Intext这个TextBox中。
Dim S As StrIng
Tcps.GetData S
InText.Text = S

  这样我们就完成了Server端的设计。

Step 3:设计TCP Client程序
  在File选项中选择New Project建立一个新的工程,在屏幕上看到许多选项,如ActiveX Document.EXE、ActiveX Document.DLL、ActiveX.EXE、ActiveX Control等。选Standard.EXE。接着在 Project下,选择Property属性选项,在General选项下,将Project Name改为TCP-Client,并将FORM名称及Caption更改为Client。
  在屏幕的Form上加入一个WinSock control,取名为 Tcpc,将protocol property设置成 0-scktcp protocol,加入两个TextBox control(Outtext、Intext),并在两个TextBox前加入两个Label,分别将其Caption改为Outtext、Intext。接着放入一个Button(button1)并将Caption 改为Connect。

(TextBox)
Name
-----------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

(Label)
Caption
--------------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

〈Button〉
Name             Caption
--------------------------------------------------------
Button1(执行建立session命令) Connect

  在Form_Load()中加入以下程序代码,这个动作是设置好我们Remote所要连接的传输端口及其网络名称。我们要连接的计算机网络名称为DAVID:
Tcpc.RemoteHost ="David"
Tcpc.RemotePort=1002

  双击Outtext到Outtext_change()加入以下程序代码,当Outtext内容改变后,文件会自动送出:
Tcpc.SendData Outtext.text

  在Tcpc_DataArrival(ByVal bytesTotal As Long)中加入以下程序代码,这是用来把所接收的文件显示在Intext这个TextBox 中。
Dim S As StrIng
Tcpc.GetData S
InText.Text = S

  这样就完成了Client端的设计。

Step 4:测试TCP Chat程序
  分别执行Server及Client程序,这时在Client的屏幕上显示In及Out TextBox及一个Connect Button;在Server屏幕上显示In及Out TextBox。
  我们按Client程序Connect button建立连接,连接建立成功后,我们可尝试在Client的Outbox 中输入一些字符串:Hello nice to meet you!我们将在Server端的Inbox看到这些字串。 接着我们在Server的Outbox也输入一些字符串:Nice to meet you, too! 我们将在Client 端的Inbox看到这些字符串。结果证明我们成功了!
-----------------------------------------------------------------

用UDP设计Chat程序

Step 1:设计第一个UDP(UDP1)程序
  在File选项中选择New Project建立一个新的工程,屏幕上会看到许多选项,如ActiveX Document.EXE、ActiveX Document.DLL、ActiveX.EXE、ActiveX Control等,这时选Standard.EXE。接着在Project下选择Property属性选项,在General选项下将Project Name改为UDP1,将protocol property设置成0-udptcp protocol,并将Form名称及Caption更改为UDP1。
  在屏幕的Form上加入一个WinSock control,取名为UDP1;加入两个TextBox control ( Outtext、Intext),并于两个TextBox前加入两个
Label control,分别将Caption改为 Outtext、 Intext。

(TextBox)
Name
-----------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

(Label)
Caption
-------------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

  在Form_Load()中加入以下程序代码,这个动作是设置好我们要连接的远端输入端口为 1001,并将输入端口设为1002。
UDP1.RemoteHost = "DAVID"
UDP1.RemotePort = 1001
UDP1.BInd 1002

  双击Outtext到Outtext_change(),加入以下程序代码,当Outtext内容改变,文件会自动送出:
UDP1.SendData Outtext.text

  在UDP1_DataArrival(ByVal bytesTotal As Long)中加入以下程序代码,这是用来把所接收的文件显示在Intext这个TextBox 中。
Dim S As String
UDP1.GetData S
InText.Text = S

  这样我们就完成了UDP1的设计。

Step 2:设计第二个UDP(UDP2)程序
  在File选项中选New Project建立一个新的工程,屏幕上会看到许多选项,如ActiveX Document.EXE、 ActiveX Document.DLL、ActiveX.EXE、ActiveX Control等,这时要选Standard.EXE。接着在 Project下,选择Property属性选项,在General选项下,将Project Name改为UDP2,将protocol property设置成0-udptcp protocol,并将Form名称及Caption更改为UDP2 。
  在屏幕的Form上加入一个WinSock control取名为UDP2 ,加入两个TextBox control ( Outtext、Intext),并在两个TextBox control前加入两个Label control,分别将Caption改为Outtext、Intext。

(TextBox)
Name
-----------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

(Label)
Caption
--------------------------------------------------------
Outtext(输出文件)
Intext(输入文件)

  在Form_Load()中加入以下程序代码,这个动作是设置好我们要连接的远端输入端口,设置为1002,并将输入端口设置为1001。
UDP2.RemoteHost = "MARY"
UDP2.RemotePort = 1002
UDP2.Bind 1001

  双击Outtext到Outtext_change()加入以下程序代码,当Outtext内容改变,文件就会自动送出:
UDP2.SendData Outtext.text

  在UDP2_DataArrival(ByVal bytesTotal As Long) 中加入以下程序代码,这是用来把所接收的文件显示在Intext这个TextBox 中。
Dim S As StrIng
UDP2.GetData S
InText.Text = S

  这样我们就完成了UDP2的设计。

Step 3:测试UDP Chat程序
  分别执行UDP1及UDP2程序。这时UDP1的屏幕上显示In及Out TextBox;UDP2屏幕也显示In及Out两个TextBox。我们在UDP1的Outbox中输入一些字符串 I want talk to Mary,我们将在UDP2端的Inbox看到这些字符串。接着我们在UDP2的Outbox也输入一些字符串This is Mary speaking!,我们将在UDP1端的Inbox看到这些字串。结果证明我们成功了!
苹果将于6月10日召开WWDC 新版OS X和iOS或将面世 传Amazon今年秋季发布电视机顶盒设备 够快:不会3种以上语言的程序员不是好程序员 Cloud Foundry、Greenplum获通用电气1亿美元注资 微软推超强Android应用Switch to Windows Phone Unity CEO宣布:放弃支持Flash平台 为交房租做App:我第一年赚了7万美金 iOS越狱大神Comex加盟Google 曾错过苹果Offer 维基百科正式从MySQL迁移到MariaDB数据库 JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember 大数据推广引领精准推广浪潮 ThoughtWorks负责人曾学海:数字渠道细分带来的架构演进 你画我猜2 : Draw Something 2正式发布 云中游科技CEO张帆:畅谈“找你妹”的自营销 Oracle当心,MySQL原始团队已重整旗鼓! 优秀的Meteor学习资源 ThoughtWorks美女分析师:如何规划企业在线数字渠道战略? OpenStack将怎样影响软件行业? 知识产权日特稿:谁动了程序员的源代码版权? MIT技术评论评选2013十大突破性技术:深度学习居首 Chrome测试版添扩展程序 可直接浏览Office文档 Ubuntu 13.04携中文衍生版UbuntuKylin 13.04发布 Spark核心开发者:性能超Hadoop百倍,算法实现仅有其1/10或1/100 移动开发的碎片化时代,我们该怎么办? 谈应用分发控制力:还是渠道为王 Unity亚洲开发者大会:手游半衰期越短,开发者手中的机会越多 《割绳子》开发者:俄罗斯双胞胎的奋斗史 曾应聘Rovio未果 Win7系统上常见IE 10问题汇总 如果苹果推廉价手机,市场份额会不会超过安卓? 移动互联网下,如何做儿童新音乐? 第三届“中科杯”全国软件设计大赛正式启动 一个很简单的问题 读取远程的页面文件内容,但需要搜索结果的页面,请问如何实现??? 写了一个telnet服务器端程序,不能用exit退出,请大家帮忙看看~~谢谢! ?!我怎么看不了帖子内容啊?!点开每一贴都出现同样的页面如下,各位是怎样? 我只能看见标题:( 图片文件上载页,在上载页中实现预览的问题?急! 我的Asp为什么不能执行? 请教xml问题。 如何动态获得表单中checkbox中的name的值还有获得其值。 如何在UNIX下配置 Tomcat4.0 + Apache1.3 + JDK1.3? 在线等待! 请问版主:为何我在本版搜索“多语言”,找到的结果中没一个打得开? 如何在一个菜单项里控制另一个菜单项的状态(如变灰) 菜鸟问题 关于几个按钮布局?急 求救:关于在程序中运行其他程序的问题! 请问哪有Report Machine的下载? 请问只知道备份文件如何恢复数据库? To:qxjavajava: 哪里可以找到scjd的题目大家先做一下? 高程水平压线通过后的一点总结 请帮初学者看看这段简单的代码!感激t0 '_bstr_t' : missing storage-class or type specifiers 文件操作安全问题,请微软专家和各位高手进来看看 请教tdbgrid如何在非绑定模式下加入新行写入数据 问一下,在datagrid里加入comboBox控件后,怎样使comboBox的边框不可见? ==高手请看,数据库备分恢复问题== 这两种赋值方法真的有区别吗?内有代码,请指点 关于与后台连接的问题 请问黑龙江中程成绩怎么查? 如何用sql语句统计满足条件的记录数? 用ASP作下拉式菜单怎么坐呀?蛮着急的呀!! 一个看似简单实则绕脑的小问题 pb8是否内嵌easerver服务器? help 请教高手:一个写输出的问题,再线等待 我在一个组件中定义了一个Text2的属性,可如何让它显示在VS。NET的属性框中呢。 用了XTREME后,它自己生成的SDI框架中,菜单.状态栏的字体太小,我想改成9号宋体,怎么办? 怎样在数据库里保存文件! 急急。。得到树的导航?在线等待!! 刚才忘记说了,如何在sql里给中文排序? 请问有什么函数可以将BigdDecimal类型转换成为String类型??(很着急!) 来者有分 今天天气很好,出来晒晒太阳!你说哪? J2EE 和J2SE 的区别? 双网卡的机器上安装Oracle的listener的配置 查了有关目录,文件的函数没找到,问一下各位,怎样判断一个目录是否为空目录? 怎么搞的,又看不了帖? 请问有什么函数可以将BigdDecimal类型转换成为String类型??(很着急!) 如何用TUXEDO同步调用存储过程? 两个SQL Server通过拔号互连为何连不通呢?ICU!!! 心情不错,散分 想写一个自定义控件,里面包含一个button控件,一个text控件,和一个JS文件。如果做到button事件调用js文件后,能传到text控件? 怎么样让DBedit1.text的值在修改后需要点击button1后才由程序去修改,不是由它自己修改,但是readonly不能真和不用普通组件怎么样做? BUILD出现以下错误怎么办?? 杭州公安消防局公布上半年全市火灾3481名肯尼亚学生获中国奖学金赴华留学外媒评述 美对叙动武属非法“战争行为英要求安理会授权对叙采取行动日本为解禁集体自卫权寻求美国理解欧洲最大公共图书馆将在伯明翰开放南非华人商城遭抢劫造成一死一伤随笔:全面理解“和平解决争端”肯尼亚发生公路交通事故日男子对车站女职员施暴 未想对方系柔日本海被标注为“东海” 日防灾地形图李显龙说应由内阁年轻人推选新加坡未来潘基文谴责刚果(金)反政府武装袭击维万人民调:94.5%受访者反对延迟退湖南衡阳土地储备中心主任涉嫌违纪被调今年第二批700余所院校在浙计划招生杭州昨迎来第十八个高温日 今明最高气嘉绍跨江通道后天零点开通 全线双向八日常水果送检实验室 样品检出农药残留金华7月份平均高温日数17.2天 秒慈溪晒上半年三公经费开支 公务接待下孕妇化妆的禁忌和注意事项十种贵人,四种朋友,遇到了千万别放手古代结婚为什么要喝交杯酒 竟藏有大秘如何引导模特流露自然情绪宝宝为什么一放床上就醒?新手爸妈通常【甜蜜影院】糖祸之恋(上)手表手机在凯里上市 备受小学生喜爱孩子最容易模仿你这12个坏习惯!父母女神王菲与酷男谢霆锋要结婚,是传言还贵州中小学生 真的蛮拼的:46%的学全国注册资本金最大村镇银行在贵州成立广西两男子偷狗被打致1死1伤 有人在“考得好我就给你买”这样的奖励方式后上海6青年逼人吃粪并暴打其致伤 后发贵州城市职业学院与荔波广播电视台签订产品众筹带你赢在创业路上这家花房式的西餐厅有毒!教你做绵软可口的“雪媚娘”,快来学吧别用你的孩子打扰我!引起很多家长的沉为什么你就是过不去美国签证申请呢?程华志:市场买预期卖事实,谨防白银利
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘