




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
甘肃政法学院 本科学生实验报告( 三 ) 姓名 学院 计算机科学学院 专业 计算机科学与技术 班级 09计本班 实验课程名称 TCP/IP协议分析 试验时间 2011 年 10 月 27 日指导教师及职称 武光利 实验成绩 开课时间 20112012 学年 第一 学期甘肃政法学院实验管理中心印制实验题目TCP协议开发小组合作否姓名班级计本(1)学 号一、实验目的学会使用Winsock控件的TCP方式实现一个网络聊天程序,以达到学会面向连接方式的程序设计方法。二实验环境Windows xp操作系统,装有Visual basic6.0软件三、实验内容与步骤1. 在客户端创建一个新的工程将其命名为“Client” 2. 将窗体的标题改为“客户端”。 3. 在窗体中添加一个 WinSock 控件,并将其命名为winsockserver。 4. 在窗体中添加一个listbox控件。将其命名为list1。 5. 在 frmClient 中添加一个 TextBox 控件。将其命名为 txtsend。 6. 在窗体上放两个 CommandButton 控件,并将其命名为 “Command1”和“Command2”。 7. 将Command1控件的标题改为“连接”, 将Command2控件的标题改为 “发送”。 8. 在窗体中添加如下的代码。 (1)当用户单击“连接”按钮后,触发时间处理程序如下: Private Sub Command2_Click() Winsockclient.Connect 向服务器发出连接请求 End Sub(2)当用户单击“发送”按钮,所触发的时间处理过程如下:Private Sub Command3_Click() Winsockclient.SendData Textsend.Text 将textsed文本框中的内容发送给远程计算机 Textsend.Text = End Sub(3)其他事件程序: Private Sub Form_Load() Textsend.Visible = False List1.Visible = False Command3.Visible = False Winsockclient.RemotePort = 1001 连接远程计算机上的1001端口 Winsockclient.RemoteHost = qianfang-8ecf4e 远程计算机的名字 End Sub Private Sub Text1_Change() Winsockclient.RemoteHost = Text1.Text 在text2文本框中输入远程计算机名或IP地址 End Sub Private Sub Winsockclient_Close() Winsockclient.Close 关闭连接 End End Sub与远程计算机取得连接后,进入下面的程序 Private Sub winsockclient_Connect() Textsend.Visible = True Text1.Visible = False List1.Visible = True Command2.Visible = False Command3.Visible = True End Sub取得连接后,对收到的数据进行DataArrival处理 Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long) Dim s As String Winsockclient.GetData s 从远程计算机接收到的数据放入s中在list1中显示接收到的内容 List1.AddItem & Index & & Trim(s) End Sub服务器端的程序 在窗体中添加三个WinSock控件,将其分别命名为SckListen、sckBusy和sckServer并将“sckServer”的“Index”属性设置为0(1)定义程序中的全局变量。Private MaxChan As Integer 定义MaxChan为整型,使用winsock控件的最大值(2)在form_load中,进行变量初始化,并设置winsock控件数组。Private Sub Form_Load() from窗口元素装载最大允许15个客户端同时登录Dim i As Integer 定义变量i为整型MaxChan = 15 将15赋值给MaxchanFor i = 1 To MaxChan - 1 进入for循环MacChan递减Load sckServer(i) 装载第i个命名为sckServer的winsock控件Next i 下一个i控件sckListen.LocalPort = 1001 在命名为sckListen的winsock控件上设置本地的监听端口为1001,并初始化sckListen.Listen 开始监听End Sub命令中指定了本地主机的通信端口,并使用Listen方法来监听连接请求。(3)当客户端有连接请求时,在服务器端触发ConnectionRequest事件,其时间处理程序代码如下:Private Sub sckListen_ConnectionRequest(ByVal requestID As Long) winsock控件的ConnectionRequest事件Dim i As Integer 定义变量i为整型决定由哪一Winsock接受请求For i = 0 To MaxChan - 1If sckServer(i).State = 0 Then 查看winsock控件状态是否为0Exit ForEnd IfNext i如果有空的winsock则使用winsock控件的accept方法接受连接If sckServer(i).State = 0 ThensckServer(i).Accept requestIDExit SubEnd If如果所有Winsock都用完则由专门的“忙”Winsock接受请求,以免用户要求得不到响应sckBusy.ClosesckBusy.Accept requestedEnd Sub(4)在DataArrival事件被触发后,对接受到的数据进行相应的处理。Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)Dim s As StringDim i As IntegersckServer(Index).GetData s 用winsock的getdata方法获取当前数据块并将其存储在s中判断是否为悄悄话,点对点方式If UCase(Left(Trim(s), 2) = PT Then 返回是以pt开头,“pt”不区分大小写If IsNumeric(Mid(Trim(s), 3, 2) Then 判断返回的的第三个字符开始的两个字符为数字如果以上两个条件都满足,则进入一下进程i = Mid(Trim(s), 3, 2) 将返回的第三个字符开始的两个字符赋值给i用winsock的senddata方法将数据发送给远程计算机,格式为Channel “i”+内容sckServer(i).SendData Channel & Index & & Right(Trim(s), Len(Trim(s) - 4)DoEventsEnd IfElse 广播方式For i = 0 To MaxChan - 1利用winsock的State属性给所有连接在服务器上的客户发消息If sckServer(i).State = 7 Then 如果已连接则用winsock的senddata向远程计算机发送数据sckServer(i).SendData Channel & Index & & Trim(s)DoEventsEnd IfNext iEnd If将接受到的数据放入命名为lstReceive的listbox控件中lstReceive.AddItem Channel & Index & & Trim(s)End Sub(5)其他事件程序。Private Sub sckBusy_Close()sckBusy.Close 关闭命名为sckBusy的winsock控件连接End SubPrivate Sub sckBusy_DataArrival(ByVal bytesTotal As Long)sckBusy.SendData 服务器忙,请稍后再连接! 如果服务器忙,则发送“”中的内容DoEventsEnd Sub如果连接失败则Error事件被触发Private Sub sckListen_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)sckListen.Close 用close方法关闭TCP连接sckListen.LocalPort = 1000 初始化本地主机1000端口sckListen.Listen 开始监听End Subsckserver控件发生错误,使用sckServer的error事件进行处理Private Sub sckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)sckServer(Index).Close 关闭连接End Sub(6)现在,在服务器既能监听又能接收数据,而且还能把接收到的数据显示出来,特别说明的是,这时的程序代码还没完,因为当远程客户计算机关闭连接时,应用程序应正确关闭TCP连接。关闭事件处理程序如下:Private Sub sckServer_Close(Index As Integer)sckServer(Index).Close 关闭连接End Sub5. 实验结果 点对点聊天 在1号和2号线程进行聊天的时候,0号线程不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路建设施工期间环境保护及生态修复合同
- 2025公务员铁警面试题目及答案
- 危险废物运输与环保风险评估与管理合同
- 期门穴穴位注射睡眠效果-洞察及研究
- 保定银行笔试题库及答案
- 专业分流面试题目及答案
- 暖通专业面试题及答案
- 河北计算机专业试题及答案
- 2025年小额贷款考试题及答案
- 消防安全活动培训反思课件
- 2025年度哈尔滨市平房区纪委监委公开招聘雇员2人考试参考题库及答案解析
- 2025年ARVR行业研究报告及未来行业发展趋势预测
- 情绪管理课2025年职场压力释放与心灵成长分析报告
- 2025年征地拆迁考试题及答案
- 巡游出租车考试题及答案
- 2025至2030中国方竹笋市场经营方向与竞争格局分析报告
- 2025年人教版三年级数学上册《混合运算》教案
- 2025医用眼科器械消毒处理标准流程
- 胸部穿刺教学课件
- 2025-2026学年苏教版(2024)小学科学三年级上册(全册)课时练习及答案(附目录P102)
- 食材配送培训计划
评论
0/150
提交评论