




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于tcp协议制作聊天软件摘要本次计算机网络课程设计是要制作一个基于tcp协议的聊天软件。整个软件包括服务器和客户端两个部分。要实现多台计算机连接情况下的接收、发送字符串,就是指多台客户端连接到同一个服务器,以服务器为中端来进行通讯。在服务端,可以设置端口,查看客户端的人数和ip,能和指定的用户进行通信。在客户端,通过设置服务端的ip和端口号来来连接服务端,在客户端可以显示出是否已连接。当运行服务器时,在其它电脑上运行客户端,输入服务器主机的ip,连接到服务器,那么客户端与客户端之间即可实现简易的通讯功能,可以相互聊天,就像qq那样进行互动。在课程设计中,我们利用visual basic 6.0编程工具来编写网络聊天程序。其中,我们将用到两个较新的控件:winsock控件和statusbar控件。winsock是mcrosoftwindows提供的网络编程接口,它提供了基于tcp/ip协议接口实现方法,通过网络进行的数据通信,需要用地址来表示网络中的主机。statusbar控件通常显示在窗体上所查看对象的信息、对象的组成或与对象操作有关的内容信息。我们在对客户端与服务器的界面进行简单的设计后,通过设置控件的属性并调用其方法就可方便地连接到一台远程机器上去,并能进行对话时,那么基于tcp协议的聊天软件也就完成了。我们的简易聊天软件可以实现多人在线聊天、查看聊天记录、清空聊天记录等等功能。关键字:visual basic 6.0 tcp协议 winsock控件 statusbar控件目录引言1一、背景介绍1二、tcp协议1三、visual basic winsock控件介绍2四、visual basic statusbar控件介绍2五、客户端/服务器模式2六、设计目的3基于tcp协议聊天软件的制作过程4一、客户端工作原理4二、服务器工作原理4三、设计客户端5四、设计服务器8五、可执行文件的生成10六、聊天软件的测试10七、总结12参考文献13引言一、背景介绍21世纪是一个以网络为核心的信息时代,要实现信息化,就必须依靠完善的网络。而随着计算机技术和通讯技术的发展,计算机网络已渗透到各个应用领域,其中最突出的,便是以tcp/ip协议为核心的internet网络发展最为迅速。因此,计算机应用程序的开发也由传统单机处理模式,转向以多机通信为主的网络应用开发。二、tcp协议tcp协议(数据传输协议)允许创建和维护与远程计算机的连接,连接两台计算机就可彼此进行数据传输。tcp是因特网中的传输层协议,使用三次握手协议建立连接。当客户端发出syn(tcp/ip建立连接时使用的握手信号)连接请求后,等待对方回答 syn+ack,表示接收到了这个消息,并最终对对方的 syn 执行 ack 确认。这种建立连接的方法可以防止产生错误的连接。 tcp三次握手的过程(如图所示)如下:1、客户端发送syn(seq=x)报文给服务器端,进入syn_send状态。2、服务器端收到syn报文,回应一个syn (seq=y)ack(ack=x+1)报文,进入syn_recv状态。3、客户端收到服务器端的syn报文,回应一个ack(ack=y+1)报文,进入established状态。三次握手完成,tcp客户端和服务器端成功地建立连接,可以开始传输数据了。三、visual basic winsock控件介绍本实验中用到visual basic 6.0中一个比较新的控件,就是winsock控件。它主要用于将winsock接口简化成易于使用的visual basic6.0内部接口。winsock控件能够通过udp协议(用户数据报协议)或tcp协议(数据传输协议)连接到远程的机器并进行数据交换,这两种协议都能用来创建客户端和服务端应用程序。winsock控件运行时没有一个可视的界面,创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来;创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。本设计中,我们用的是tcp协议。tcp协议是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接。四、visual basic statusbar控件介绍一个statusbar控件由panel对象组成,每个panel对象都可以包含文本或图片。statusbar控件提供窗体,该窗体通常位于父窗体的底部,通过这一窗体,应用程序能显示各种状态数据。statusbar最多能被分成 16 个panel对象,这些对象包含在panels集合中。在设计时,可以创建和自定义panel对象的外观,在statusbar控件的properties page中,选择panel卡片就可以设置各种参数了。在运行时,可以根据应用程序的状态对panel对象重新配置以反映不同的功能。一个statusbar控件通常显示在窗体上所查看对象的信息、对象的组成或与对象操作有关的内容信息。statusbar控件与其他控件如toolbar控件一起,可以使你创建经济而又富含信息的用户界面。五、客户端/服务器模式c/s结构(client/server结构)是大家熟知的客户端和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到client端和server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是client/server形式的两层结构。服务器:(1)打开一通信通道并告知本地主机,它在某一公认地址端口上接受客户请求。(2)等待客户请求到达该端口。(3)接收到重复服务请求,处理该请求并发送应答信号。接收并发服务请求,要激活一新进程来处理这个客户请求。服务完成后,关闭此新进程与客户的通信链路,并终止。(4)返回第二步,等待另外的客户请求。(5)关闭服务器。客户端:(1)打开一通信通道,并连接到服务器所在主机的特定端口。(2)向服务器发出服务请求报文,等待并接收应答;继续提出请求。(3)请求结束后关闭通信通道并终止。六、设计目的本课程设计的目标是用visual basic6.0设计一个基于tcp协议的聊天软件。我们利用visual basic winsock控件和statusbar控件实现。程序完成后最终生成服务器和客户端两个可执行文件,打开服务器可执行文件,即运行服务器,然后客户端可以与局域网上不同的主机上运行,输入服务器主机的ip,连接到服务器,客户端与客户端之间即可实现简易的聊天功能,在服务器可以显示在线人数以及客户端的ip地址。基于tcp协议聊天软件的制作过程一、客户端工作原理在运行服务器之后,运行客户端。客户端首先向服务器提出建立连接请求,然后建立一个套接字描述符,通过该描述符调用数据传输函数即可与服务端进行数据的收发。用户登录成功后,向服务器发送登陆消息,并更新本地在线用户列表,然后通过服务器实现与其他客户聊天;当客户退出,向服务器发送下线消息。客户端流程如图a。图b图a二、服务器工作原理首先运行服务器,服务器侦听端口消息,等待客户端向其建立连接的申请,一旦接收到客户端的连接请求,服务器将返回一个新的套接字描述符,通过该描述符调用数据传输函数即可与客户端进行数据的收发。服务器若接收的是登陆信息,向该用户发送在线用户列表,并更新服务器的在线用户列表;若收到的是发送信息,服务器解析信息,然后通过广播消息,向其所有线用户列表发送消息。服务器端流程图如图b。三、设计客户端客户端的程序编写:1.在客户端创建一个新的工程将其命名为“客户”。2.将缺省窗体命名为“客户”。3.将窗体的标题改为“客户端。4.在窗体中添加一个winsock控件,默认其命名为winsock1。5.在窗体中添加四个richtextbox控件。默认其命名为text1、text2、text3、text4,并将其内容清空。6.在窗体中添加四个commandbutton控件。其命名默认为command1、command2、command3、command4,并将它们的caption属性分别修改为“连接”、“发送”、“断开”、“清空”。7.在窗体上放四个label控件,其命名默认为label1、label2、label3、label4,并将它们的caption属性修改为“编辑窗口”、“聊天记录”、“系统消息”、“服务器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.state = 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 = false text1.setfocus statusbar1.panels(1).text = 连接到 & 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.setfocusend 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 = 无法连接. end subprivate sub command4_click() 清空聊天记录程序段text2.text = text1.setfocusend subprivate sub exitname_click() 点击file-exit,退出聊天endend subprivate sub form_load() 运行时最初显示的属性以及提示 winsock1.remotehost = 92 show msgbox visual basic winsock chat & vbcrlf & by chendf & vbcrlf & vbcrlf & press button确定 , then press menu help for help., vbinformation winsock1.remoteport = 1600 command1.enabled = true command2.enabled = false command3.enabled = falseend subprivate sub helpbutton_click() 点击help,弹出帮助文本chdir app.pathshell notepad.exe 使用必读.txt, vbnormalfocus 调用外部程序notepad.exe来打开帮助文本文件end subprivate sub winsock1_close() 关闭winsock command1.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$(13) + chr$(10)end sub四、设计服务器1.在服务器端创建一个新的工程将其命名为“服务器”。2.将缺省窗体命名为“服务器”。3.在窗体中添加一个listbox控件,将其命名为“listbox”。4.在窗体中添加一个winsock控件,其名默认为winsock1,并将其属“index”,属性设置为0。设置完以后,winsock1会变成winsock1(0)。5在窗体上添加两个richtextbox控件,其名默认为text2、text3,将text3初值设置为0。6.在窗体上添加三个label控件,其名默认为label1、label2,label3,并将它们的caption属性改为“在线人数”、“客户端ip列表”、“服务器ip”7.打开菜单编辑器,为窗体添加菜单file:8.在窗体中添加如下代码:private gac() as booleandim socknumber as integer 定义变量private sub exitname_click() 点击file-exit,退出聊天endend subprivate sub form_load() 开始运行时显示窗口的属性以及执行的操作 winsock1(0).localport = 1600 winsock1(0).protocol = scktcpprotocol me.caption = 服务器 & - & winsock1(0).localip & : & winsock1(0).localport winsock1(0).listen socknumber = 0end subprivate sub form_unload(cancel as integer) unload时关闭winsock winsock1(0).closeend subprivate sub text2_click()text2.text = winsock1(0).localip 显示本机服务器ipend subprivate sub winsock1_close(index as integer) 关闭winsock winsock1(index).close unload winsock1(index) gac(index) = false text3.text = int(text3.text) - 1end subprivate sub winsock1_connectionrequest(index as integer, byval requestid as long) dim ip as string socknumber = socknumber + 1 连接请求 load winsock1(socknumber) winsock1(socknumber).accept requestid redim preserve gac(socknumber) gac(socknumber) = true text3.text = int(text3.text) + 1 ip = winsock1(index).remotehostip listip.additem ipend subprivate sub winsock1_dataarrival(index as integer, byval bytestotal as long) dim c as string 数据到达 winsock1(index).getdata c, vbstring dim i as integer for i = 1 to ubound(gac) if not i = index then if gac(i) then winsock1(i).senddata c doevents end if end if next iend sub五、可执行文件的生成点击“文件”“生成服务器.exe”即可生成服务器端的可执行文件。(客户.exe的生成方法相同),如下图所示:六、聊天软件的测试在一台计算机中运行服
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论