用VB编写基于TCP协议聊天程序.doc
《用VB编写基于TCP协议聊天程序.doc》由会员分享,可在线阅读,更多相关《用VB编写基于TCP协议聊天程序.doc(34页珍藏版)》请在咨信网上搜索。
1、基于TCP协议的点对点聊天程序计算机网络原理实验报告基于TCP协议的点对点聊天程序 作者: 班级: 学号: 导师: 目录1、 设计目标32、 Visual Basic Winsock控件简单介绍33、 Visual Basic Winsock控件的导入 34、 程序设计的主要步骤.5 4.1网络通信协议的基础和选择 54.2 客户端与服务器的实现过程.64.3 程序的编写.84.4可执行文件的生成.145、测试.156、总结.18 6.1 关键问题.18 6.2 本程序的不足.18 6.3 心得体会.181、 设计目标本实验的目标是用Visual Basic语言设计一个基于TCP/IP协议的点
2、对点的聊天程序。 利用Visual Basic Winsock控件实现。程序写完后最终生成服务器和客户端两个可执行文件,打开服务器可执行文件,即运行服务器,然后客户端可以不局域网上不同的主机上运行,输入服务器主机的IP,连接到服务器,客户端与客户端之间即可实现简易的聊天功能,在服务器可以显示在线人数以及客户端的IP地址。2、 Visual Basic Winsock控件简单介绍本实验用到Visual Basic中一个比较新的控件,就是Winsock控件。它主要用于将Winsock接口简化成易于使用的Visual Basic内部接口。在这种控件问世之前,要想通过Visual Basic 进行网络
3、程序设计,唯一的办法便是将所有Winsock函数都从DLL中导入(Import),然后重新定义必要的结构。但是这样的话,结构的数量就是很多,工作量也太大,且极易出错。Winsock控件问世之前,用Visual Basic进行网络编程就变得非常方便了。Winsock控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。3、Visual Basic Winsock控件的导入在打开Visual Bas
4、ic 软件时,在工具箱中并没有Winsock 控件,要使用它,首先要将这个控件引用进来,如下图操件:(注意可能在部件中没有该控件,解决办法请阅读“使用必读.txt”)点击“工程”部件,弹出对话框,选择Microsoft Winsock Control 6.0 。(注意可能在部件中没有该控件供选择,解决办法请阅读“使用必读.txt”)选择完成后这时在Visual Basic的编辑画面左这的工具箱中会多一个控件,这就是Winsock控件,现在就可以开始使用它进行设计编程。4、 程序设计的主要步骤4.1网络通信协议的基础和选择 a、TCP(数据传输协议)基础数据传输协议允许创建和维护与远程计算机的连
5、接。连接两台计算机就可彼此进行数据传输。如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 Dat
6、aArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。b、 UDP(用户数据文报协议)基础用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连接。另外 UDP 应用程序可以是客户机,也可以是服务器。为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使用 Data
7、Arrival 事件内的 GetData 方法来获取已发送的信息。c、 选择通讯协议在使用 WinSock 控件时,首先需要选择使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态:TCP 协议是有连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。通讯协议的选择是通过设置WinSock的Protocol属性来实现的。在这里我选择的是使用TCP通讯协议编写聊
8、天程序,通过编写程序:Winsock1(0).Protocol = sckTCPProtocol,即可以选择TCP协议。也可以通过属性窗口进行选择,如下图4.2 客户端与服务器的实现过程客户端:a、设置远程服务器主机端口Winsock1.RemotePort = 1600 b、设置远程服务器主机IP地址 Winsock1.RemoteHost = Trim(Text4.Text)在文本框Text4中输入服务器的IP地址。 c、与服务器主机连接,发生错误则关闭Winsock1.Connect d、发送与接收数据 在事件Winsock1_DataArrival中编写如下代码, Winsock1.S
9、endData Text1.Text 要发送的话在文本框Text1中输入 Winsock1.GetData c, vbString 接收数据,将接收到的数据存放在变量c中YesNoYesNo e、关闭连接 Winsock1.CloseSendData GetData开始 其流程图如右所示: 断开连接?远程主机IP与端口设置CloseConnect结束Error?服务器端:a、设置服务器本地端口Winsock1(0).LocalPort = 1600 b、监听客户端的连接请求Winsock1(0).Listen c、当有连接到达时,接受请求 在事件Winsock1_ConnectionReque
10、st(中编写如下代码, Winsock1(Socknumber).Accept requested d、发送与接收数据 在事件Winsock1_DataArrival中编写如下代码, Winsock1(Index).GetData c, vbString 获取数据Winsock1(i).SendData c 发送数据 e、关闭连接 Winsock1.Close其流程图如下所示:开始本地端口设置ListenError ?YesNoGetData , SendData没有断开则继续CloseClose结束4.3 程序的编写客户端的程序编写:1. 在客户端创建一个新的工程将其命名为“客户”。2. 将
11、缺省窗体命名为 “客户”。3. 将窗体的标题改为“客户端。4. 在窗体中添加一个 WinSock 控件,默认其命名为 Winsock1。5. 在窗体中添加四个TextBox 控件。默认其命名为Text1、Text2、Text3、Text4,并将其内容清空。6. 在窗体中添加四个CommandButton控件。其命名默认为 Command1、Command2、Command3、Command4,并将它们的Caption属性分别修改为“连接”、“发送”、“断开”、“清空聊天记录”。7. 在窗体上放四个Label 控件,其命名默认为Label1、Label2、Label3、Label4,并将它们的C
12、aption属性修改为“发送”、“聊天记录”、“系统消息”、“服务器IP”。8. 在窗体上放一个StatusBar控件,其命名默认为StatusBar1其属性设置如下图所示:9.打开菜单编辑器,为窗体添加菜单,设置如下图所示:10. 在窗体中添加如下的代码。 Option ExplicitPrivate Sub Command1_Click() 连接服务器程序段 Winsock1.RemoteHost = Trim(Text4.Text) Winsock1.Connect Command1.Enabled = False Do DoEvents Loop Until Winsock1.Stat
13、e = sckConnected Or Winsock1.State = sckError If Winsock1.State = sckError Then Command1.Enabled = True Winsock1.Close Text3.Text = Text3.Text + 与服务器连接失败 + Chr$(13) + Chr$(10) Else Text3.Text = Text3.Text + 与服务器连接成功 + Chr$(13) + Chr$(10) Command2.Enabled = True Command3.Enabled = True Text4.Enabled
14、= False Text1.SetFocus StatusBar1.Panels(1).Text = Connected to & Winsock1.RemoteHost & End IfEnd SubPrivate Sub Command2_Click() 发送消息程序段If Text1.Text = ThenMsgBox 不能发送空消息Else Winsock1.SendData Text1.Text Text2.Text = Text2.Text + 我说的话: + Text1.Text + Chr$(13) + Chr$(10) Text1.Text = End IfText1.Set
15、FocusEnd SubPrivate Sub Command3_Click() 断开与服务器连接程序段 Winsock1.Close Command1.Enabled = True Command2.Enabled = False Command3.Enabled = False Text3.Text = 已与服务器断开 + Chr$(13) + Chr$(10) + Text3.Text Text4.Enabled = True StatusBar1.Panels(1).Text = No connection. End SubPrivate Sub Command4_Click() 清空
16、聊天记录程序段Text2.Text = Text1.SetFocusEnd SubPrivate Sub exitbutton_Click() 点击File-exit,退出聊天EndEnd SubPrivate Sub Form_Load() 运行时最初显示的属性以及提示 Winsock1.RemoteHost = 218.192.165.192 Show MsgBox Visual Basic Winsock Chat & vbCrLf & by chendf & vbCrLf & vbCrLf & Press Button确定 , then Press Menu Help for help
17、., vbInformation Winsock1.RemotePort = 1600 Command1.Enabled = True Command2.Enabled = False Command3.Enabled = False End SubPrivate Sub helpbutton_Click() 点击Help,弹出帮助文本ChDir App.PathShell notepad.exe 使用必读.txt, vbNormalFocus 调用外部程序notepad.exe来打开帮助文本文件End SubPrivate Sub Winsock1_Close() 关闭winsock Com
18、mand1.Enabled = True Command2.Enabled = False Command3.Enabled = False Winsock1.Close Text3.Text = 已与服务器断开 + Chr$(13) + Chr$(10) + Text3.TextEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 数据到达 Dim c As String Winsock1.GetData c, vbString Text2.Text = Text2.Text + 对方说的话: + c + Chr$
19、(13) + Chr$(10)End Sub服务器端的程序编写:1. 在服务器端创建一个新的工程将其命名为“服务器”。2. 将缺省窗体命名为“服务器”。3. 在窗体中添加一个ListBox控件,将其命名为“ListBox”。4. 在窗体中添加一个WinSock控件,其名默认为Winsock1,并将其属性“Index”属性设置为0,如下图:设置完以后,Winsock1会变成Winsock1(0)。5在窗体上添加一个TextBox控件,其名默认为Text3,将其初值设置为0。6. 在窗体上添加两个Label控件,其名默认为Label1、Label2,并将它们的Caption属性改为“在线人数”、“
20、客户端IP列表”。7.打开菜单编辑器,为窗体添加菜单file。8. 在窗体中添加如下代码.。Private Gac() As BooleanDim Socknumber As Integer 定义变量Private Sub exitbutton_Click() 点击file-exit,退出系统EndEnd SubPrivate Sub Form_Load() 开始运行时显示窗口的属性以及执行的操作 Winsock1(0).LocalPort = 1600 Winsock1(0).Protocol = sckTCPProtocol Me.Caption = 服务器 & - & Winsock1(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 编写 基于 TCP 协议 聊天 程序
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。