LinuxC局域网聊天项目设计书Word文档下载推荐.docx
《LinuxC局域网聊天项目设计书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《LinuxC局域网聊天项目设计书Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
套接字(Socket)起初来源于UNIX,是加利福尼亚大学Berkeley分校开发的UNIX操作系统下的网络通信接口。
随着UNIX操作系统的广泛使用,Socket亦当之无愧的成为了最流行的网络通信程序接口之一。
套接字存在于其特定的通信域(即地址族)中,只有隶属于同一地址族的套接字才能建立对话,WindowsSocketsV1.0目前只支持网际域(AF_INET),所有使用网际协议簇的进程均适用于该域。
一般情况下除非通信协议支持,只有相同类型的套接字方能相互传递数据,WindowsSocketsV1.1版主要支持两种类型的套接字:
流式套接字和数据报套接字,还有一种是原始套接字,但为保证网络应用程序的兼容性,一般不鼓励使用原始套接字。
式套接字(SOCK_STREAM):
该类套接字提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务。
而且发送的数据是按顺序接收的。
所有利用该套接字进行传递的数据均被视为连续的字节流的并且无长度限制。
这对数据的稳定性、正确性和发送/接受顺序要求严格的应用十分适用,TCP协议使用该类接口。
但其对线路的占用率相对提高。
流式套接字的实现屡见不鲜,如远程登录(TELNET)、文件传输协议(FTP)等均使用了流式套接字。
数据报式套接字(SOCK_DGRAM):
数据报式套接字提供了面向无连接的服务,它独立的数据包形式发送数据(数据包长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送顺序,因此,可能出现数据的重发、丢失等现象,并且接收顺序由具体路由决定。
然而,数据报的实现对网络线路占用率较低。
NFS(网络文件系统)即是采用此类套接字、在TCP/IP协议族中,UDP(UserDatagramProtocol)使用该类接口。
原始套接字(SOCK_RAW):
该套接字一般不会出现在高级网络接口的实现中,因为它是直接针对协议的较低层(如IP、TCP、UDP等)直接访问的。
常用于检验新的协议实现或访问现有服务中配置的新设备,如前所述,一般不提倡他的直接应用。
1.2c/s架构介绍
C/S结构(Client/Server结构)是大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;
因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。
由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。
国内目前的大部分ERP(财务)软件产品即属于此类结构。
B/S(浏览器/服务器模式)是随着Internet技术的兴起,对C/S结构的一种改进。
在这种结构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在Web服务器实现,客户端只需要浏览器即可进行业务处理,是一种全新的软件系统构造技术。
这种结构更成为当今应用软件的首选体系结构。
e通管理系列产品即属于此类结构。
1.3项目要求
项目采用C程序设计语言,设计基于WinSock的文件传输系统。
利用C/S架构及WinSock知识,实现文件的传输;
在服务端和客户端分别建立套接字,并绑定到某个端口上,同时对winsockdll进行初始化,协商winsock的版本支持并分配必要的资源。
服务端调用winsock的accept方法,实现套接字的侦听,等待客户端的连接请求;
客户端调用winsock的connect方法建立连接。
先启动服务器,则等待客户端连接,若先启动客户端,则客户端要对服务端进行多次连接。
在连接的过程中如有异常应有相应提示信息。
连接成果后,由服务端向客户端做相应的操作。
如传送文件。
或者聊天。
如果客户端同意,则继续操作。
若不同意,则返回主目录。
传送文件时,服务端必须先得到客户端的同意,在向客户端传送文件的信息,如大小,文件名。
之后通过分块进行发送。
在发送的过程中要注意是否有丢包,并进行检测。
如有则有提示信息。
在传送的过程中要随时显示传送的进度及接受读写等信息。
文件发送完毕退出相应程序,返回主目录,进行其他的操作。
聊天模块同样由服务端客户端进行申请,得到同意后才可进行连接。
显示的信息应包括用户姓名,发送时间,及消息内容。
用户若要退出,输入EXIT即可。
之后程序返回主目录,进行其他的操作。
在这些模块中,如双方中有一方突然异常的关闭窗口,应进行检测,并作出相应操作,如“服务端已退出程序,本端也将退出”。
2.项目流程
2.1流程概述
系统的工作流程:
当系统安装在Linux操作系统上后,客户可以只安装该系统的客户端,客户通过客户端开连接服务器,服务器时可以在局域网中的另一台机器上的。
客户端进入系统后,首先进行IP设置,即填写服务器所在的IP地址,填写后,客户端会自动检查该IP地址的合法性,若不合法,提示用户,并且重新输入,若合法,则进行连接服务器,此时客户端会自动创建套接字,然后将其绑定,然后发送到服务端进行连接,以上前提条件时,客户在进行IP设置的时候,服务器必须时开启的,否这无法连接,这时客户端服务器端都会给出相应的错误警告。
若服务器开启,上述操作完成后,客户端的程序会自动的连接上服务器,服务器监听到,然后连接成功后服务器会发送连接成功的信息返回到客户端,系统连接上后,会自动跳转到登录系统,若任然未连接成功,会在客户端和服务器端给出提示信息!
在登录系统中,客户端需要进行注册,登录才能进入相应的主要功能界面,在注册时,客户端会将当前用户的注册信息发送到服务端,服务器对他该用户信息进行检测,若发现用户注册的用户名已经存在,则提示用户该用户名存在,则用户需要重新注册,否则,服务器会发送相应的信息个客户端,提示用户注册成功,并将用户的信息保存到相关的文件中,为登录时的验证身份做准备,在服务器上也会给出相应的提示信息。
注册完毕后,自动跳转到登录界面。
用户进入登录界面后,输入注册的用户名和密码,此时客户端同样会将该信息发送到服务器上进行验证,此时服务器将打开保存用户信息的文件,进行校验,若发现用户名或者密码输入不正确,服务器将返回相应的信息给用户,提示用户重新输入,直到用户输入成功,或者用户退出为止。
登录成功后,用户会进入主功能界面,主功能界面包含文件的上传(即客户发送文件到服务器)和下载(即服务器的文件发送到客户端),聊天,查看当前在线用户,查看当前的聊天信息,和退出。
在进行上传和下载的过程中,采用的时分模块下载,我们为了界面的美观性,在下载过程中对其进行了短暂的睡眠,此时用户能清晰的看到下载过程中相关的信息,在上传和下载的过程中都要验证下载的文件是否是普通文件,不是给出提示信息,并退出下载。
在下载或上传文件中,客户都需要指定文件的所在的路径,和上传或者下载后文件所在的路径,如果不给文件上传或者下载的路径,则将其放在默认的路径下。
下载完成后,自动跳转回到主界面。
在查看当前在线用户时,我们建立了一个在线用户信息文件,用来保存登录成功的用户信息,当客户需要查看在线用户信息时,服务器调用该文件,读取在线用户的信息发送给客户端,客户端就可以查看到相关在线用户的姓名和状态。
聊天模块中,我们采用的时多重IO,客户端可以发送信息到服务器,服务器接受后,同样也可以发送相关的信息到客户端,实现聊天。
在聊天信息的发送中,我们小组将用户姓名,发送信息时间,和信息体封装在一个结构体中,进行块操作,这样客户端客户端都能获得相关的聊天信息。
无论那方发送quit(退出命令),都会使客户端退出聊天,使客户端回到主界面。
在查看聊天记录时,聊天记录是保存在一个以用户命名的文件中,并保存在本地(即客户端),客户需要查看聊天记录时,可以通过命令来查看相关的聊天信息,也可以在本地找到该文件打开查看。
退出,当用户想退出该系统时,系统会提示用户是否确定退出,不是,客户端跳回主界面,继续进行相关的操作,是,则客户端退出,服务器也受到相关的提示信息,服务器然后将该客户的在线状态修改,并断开与该客户的连接。
2.2项目流程图
文件传输系统
返回服务端
不同意
返回客户端
连接异常中断
聊天
2.3详细设计
2.3.1系统主界面模块
服务器主要时执行客户端的命令,所以服务器基本不去打印其他信息,主要的功能命令都在客户端。
连接时,客户端调用do_connect(),ip_set(),ip_effect(),服务器调用init()
下面是服务器设置的截图:
1-1连接服务器IP设置
登陆界面在服务器与客户端正确连接后,自动的调用,注册时客户端和服务端都调用
do_register()函数,登陆时客户端和服务端都调用do_login()函数,退出时客户端和服务端都调用do_bye()函数.
下面是登录界面的截图:
1-2主界面
登陆界面中输入的用户名和密码都会在服务器去验证,若正确,则容许客户端进入主功能界面,否则提示用户,并重新输入!
在验证时,在服务器端调用do_login()函数。
登陆界面截图:
1-3登陆界面
主要功能界面:
在登陆成功后,自动跳转到改界面,用户可以在这个界面选择相应的数字来完成相对应的功能,主要功能界面在每个功能成功执行后,都能再次跳转回来,主功能界面时用户和服务器”沟通”的主要界面。
下面是主功能界面截图:
1-4主要功能界面
在用户选择上传或下载时,进入到如下界面,在服务器和客户端同时调用do_put(),do_get()函数。
下面时上传时的截图:
1-5上传
查看在线用户,查看在线用户时,会在服务器端把在线用户的文件夹打开,循环发送到客户端,同时调用do_online()函数。
下面时显示在线用户的截图:
1-6显示在线用户
聊天函数是这个系统的一个大模块,采用的是多重IO输入,在实现此功能时客户端和服务器同时调用do_chat()函数。
聊天时截图:
1-7聊天
查看聊天记录,在用户聊天结束后,聊天记录被保存在客户端当前目录下(即本地),并以客户端用户名命名的文件中,用户查看聊天记录时,可以直接打开改文件件,或者通过界面的功能来查看聊天记录。
下面时通过命令来查看聊天记录的截图:
1-8聊天记录
退出时会请求用户是否确认退出,防止用户的误操作,给用户带来不必要的麻烦。
用户退出时,会告知服务器,并断开相应的链接,服务器同时会修改用户的在线状态,并断开其连接。
下面是退出时的确认退出截图:
1-9用户确认退出
3.项目中的细节描述
3.1项目中曾出现的问题
3.2项目有待进一步完善的地方
4.项目总结
参考文献
[a]C语言WinSock学习笔记作者:
肖进发布:
dxy发布日期:
2007-12-1121:
19:
42
[b]开发WindowsSockets通信应用程序的经验与实践
青岛海军潜艇学院软件中心(266071)徐立国
[c]WinSock网络编程实用宝典FreeProgramming-博客园
<
[d]C语言网络编程必备C语言空间<
>
[e]c语言的文件和文件操作(转载)cser之家<
[f]WindowsSockets规范及应用上海交通大学秦颖李铮
附:
程序主要源代码