基于TCP局域网聊天程序设计

上传人:pu****.1 文档编号:464401775 上传时间:2024-01-09 格式:DOC 页数:24 大小:185.51KB
返回 下载 相关 举报
基于TCP局域网聊天程序设计_第1页
第1页 / 共24页
基于TCP局域网聊天程序设计_第2页
第2页 / 共24页
基于TCP局域网聊天程序设计_第3页
第3页 / 共24页
基于TCP局域网聊天程序设计_第4页
第4页 / 共24页
基于TCP局域网聊天程序设计_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《基于TCP局域网聊天程序设计》由会员分享,可在线阅读,更多相关《基于TCP局域网聊天程序设计(24页珍藏版)》请在金锄头文库上搜索。

1、基于TCP局域网聊天程序第一章 系统分析11 系统设计要求:12312 系统原理框图本次课程设计的原理框图如图1.1所示:图1.1系统原理框图13 系统设计原理局域网聊天程序的实现主要为局域网内的计算机提供交流的平台。完成一个基于服务器和客户端的局域网通讯软件,类似于聊天室,可进行注册、登录、系统信息记录、聊天等功能。用户容易使用,便于管理。第二章 系统设计理论基础2.1 TCP/IP协议TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中设计。因此用户一般不涉及。TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用

2、telnet登陆BBS,用的就是TCP协议;UDP是无连接的,通信双方都不保持对方的状态,浏览器访问Internet时使用的HTTP协议就是基于UDP协议的。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内设计,后者为核外设计。用户服务要通过核外的应用程序才能设计,所以要使用套接字(socket)来设计。2.2 客户机/服务器模式C/S结构(Client/Server结构)是大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开

3、销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。首先服务器方要启动,并根据请求提供相应服务: (1)打开一通信通道并告知本地主机,它在某一公认地址端口上(如http为80)接受客户请求。 (2)等待客户请求到达该端口。 (3)接收到重复服务请求,处理该请求并发送应答信号。接收并发服务请求,要激

4、活一新进程来处理这个客户请求。新进程处理此客户请求,并不需要对其他请求做出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。 (4)返回第二步,等待另外的客户请求 (5)关闭服务器。 客户方: (1)打开一通信通道,并连接到服务器所在主机的特定端口。 (2)向服务器发出服务请求报文,等待并接收应答;继续提出请求。 (3)请求结束后关闭通信通道并终止。 从上面的描述过程可知: (1)客户与服务器进程的作用是非对称的。因此编码不同。 (2)服务进程一般是先于客户请求启动的。只要系统运行,该进程一直存在,直到 正常终止或者强迫终止。在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服

5、务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。2.3 Socketsocket之间的连接可以分为三种类型:客户端连接,监听连接以及服务器端连接。 客户端连接是指由客户端的socket提出连接请求,要连接的目标是服务器端的socket。为此,客户端的socket必须首先描述它要连接的服务器端socket(主要是指服务器 端socket的地址和端口号),然后再定位所要连接的服务器端socket,找到以后,就向服务器端 socket请求连接。当然,服务器端的socket此时未必正好处于准备好状态,不过,服务器端的 socket会自

6、动维护客户请求连接的队列,然后在它认为合适的时候向客户端socket发出允许连接 (accept)的信号,这时客户端socket与服务器端socket的连接就建立了。监听连接,服务器端 socket并不定位具体的客户端socket,而是处于等待连接的状态。当服务器端socket监听到或者说 接收到客户端socket的连接请求,它就响应客户端socket的请求建立一个新的socket句柄并与客户 端连接,而服务器端socket继续处于监听状态,还可以接收其它客户端socket的连接请求。服务器端连接,是指当服务器端socket接收到客户端socket的连接请求后,就把服务器端socket的描述发

7、给客户端,一旦客户端确认了此描述,连接就建立了。在本文中的聊天程序用的就是监听连接,即服务器设置连接个数后进行监听,客户端进行对服务器端的连接,这样就可以进行相互通信了。第三章 系统设计3.1 系统设计目标局域网聊天程序的设计目标为一个高性能的,易于使用的,面向局域网的即时信息软件。最终的程序应具有如下功能:(1)客户端使用简便,服务器端运行稳定。客户端与服务器端可运行在多种系统平台,具有良好的兼容性能。(2)客户端与服务器端功能独立,可独立运行在不同的计算机上或运行在同一台计算机上,具有最大的灵活性。(3)能够进行注册,设置自己的用户名和密码,自动更新其他用户的名单。(4)选择特定用户并与其

8、交谈,还可以向在所有在线的用户发送消息。3.2客户端设计 客户端设计界面图为: 图3.1 聊天客户端界面图 从聊天客户端界面图知道设计步骤为: 添加一个客户端socket控件(ClientSocket)到form中使之成为一个TCP/IP客户。客户sockets允许你指定你想连接的服务器socket和你希望服务器提供的服务。一但你描述你想得到的连接,你可以使用客户socket控件去完成连接服务。 每个客户socket控件使用独立的客户windows socket对象(TClientWinSocket)去应答连接中的客户终端。使用客户sockets去: A.指定想得到的服务 客户socket控件

9、有一个数字properties,允许你指定想连接的服务器系统和端口。可以通过主机名来指定服务器系统,使用Host property。 如果不知道主机名,或者关心找到服务器的速度,你可以指定服务器系统的IP地址,通过使用Address property。你必须指定IP地址和主机名中的一个。 如果两个都指定,客户socket控件将使用主机名。除服务器系统外,必须指定客户socket将连接的在服务器系统上的端口。能够直接使用Port property来指定服务端口号。或者直接在Service property使用想得到的服务的名字。如果指定端口号和服务名,客户socket控件将使用服务名。 B.建立

10、连接 一旦在客户socket控件中完成了设置所连接的服务器的属性,就可以进行连接,通过调用Open方法。如果想要启动时自动建立连接,在设计时设置Active property为true,通过使用Object Inspector来设置。C.取得关于连接的信息 完成连接到服务器socket后,可以使用客户socket控件和相关的客户windows socket object去取得关于连接的信息。使用Socket property去访问client windows socket object。windows socket object 有一个properties,它能让你确定在连接的两端客户和服务器

11、使用的地址和端口号。 当使用一个windows socket API调用时,可以使用SocketHandle property区获得socket连接使用的handle。可以使用Handle property去访问windows,以便接收来自socket连接的信息。AsyncStyles property决定哪种信息类型是windows handle要接收的。D.关闭连接 当完成通讯想关闭socket 连接时,能够通过调用Close方法来关闭连接。连接可能要由服务器端来关闭。如果是这种情况,将收到一个OnDisconnect 事件的通知。 聊天客户端程序代码如下:procedure TForm1

12、.Button1Click(Sender: TObject);begin clientsocket1.Address:=edit3.Text;/ edit3.Clear; clientsocket1.Active:=true; button1.Enabled:=false; button3.Enabled:=true; button2.Enabled:=true;button7.Enabled:=true;end;procedure TForm1.ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket);begin s

13、tatusbar1.SimpleText:=正在连接. + clientsocket1.Address;end;procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);begin statusbar1.SimpleText:=连接到 + clientsocket1.Address;end;procedure TForm1.Button4Click(Sender: TObject);begin close;end;procedure TForm1.Button3Click(Sender: T

14、Object);begin if clientsocket1.Active then begin clientsocket1.Socket.SendText(usename+*&%#); clientsocket1.Active:=false; end; statusbar1.SimpleText:=断开连接; edit1.Enabled:=true; edit2.Enabled:=true; button1.Enabled:=true; button6.Enabled:=true; memo1.Clear; listbox1.Clear;end;procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);begin if key=#13 then if button6.Enabled then button6.Click;end;procedure TForm1.Button6Click(Sender: TObject);var chatname : string; i :

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号