武 汉 华 夏 理 工 学 院
信 息 工 程 学 院
课程名称:Linux 网络编程
题
目:
基于 Linux 操作系统 C 语言开发
的多人聊天室程序设计与实现
专业班级:
计算机 1163 班
姓
学
名:
号:
程卓
10210416320
授课教师:
罗瑜
成
绩:
2019 年 5 月 31 日
目录
1 设计目的 .......................................................................................................................................................... 3
2 开发环境 .......................................................................................................................................................... 3
3 需求分析 .......................................................................................................................................................... 3
4 概要设计 .......................................................................................................................................................... 4
4.1 设计思想 ............................................................................................................................................... 4
4.2 服务器功能描述................................................................................................................................... 4
4.3 客户端的功能描述 ............................................................................................................................... 5
5 总体设计 .......................................................................................................................................................... 5
5.1 系统功能流程图................................................................................................................................... 5
5.2 系统操作流程图................................................................................................................................... 6
6 详细设计与实现.............................................................................................................................................. 7
6.1 服务器进行编译执行.......................................................................................................................... 7
6.2 客户端进行编译执行........................................................................................................................... 7
6.3 服务器进行注册,创建用户名和密码 ...............................................................................................8
6.4 使用注册的账户和密码进行登录操作 ...............................................................................................8
6.5 从客户端发送消息给服务端,服务端并成功接收...........................................................................8
7 总结 ...................................................................................................................................................................9
8 参考文献 .......................................................................................................................................................... 10
9 附录源代码 ...................................................................................................................................................... 10
9.1 客户端 client.c 源码 ......................................................................................................................... 10
9.2 服务端 server.c 源码 ......................................................................................................................... 13
1 设计目的
本课程设计主要实现一个 Linux 下的局域网聊天工具的设计。该设计主要分为两部分,
客户端部分和主机部分。运行服务器端程序可以和任意运行了客户端程序的主机进行通信,
通信内容能够通过终端显示出来。两个部分都使用 C 语言,利用 vi 编辑器,通过 Berkeley
套接口编程实现相关功能。
要求:
(1)主要实现一个 Linux 下的局域网聊天工具的设计,进一步掌握 vi,gcc 等工具的
使用,并且熟悉 Linux 下的网络编程,以及多线程编程。
(2)通过实际项目的分析、安装、配置、测试等工作,掌握用 Linux 系统下的网络聊
天室的应用。
2 开发环境
硬件环境: Intel(r) Core(TM)i7-6700HQ
@2.6Hz 8.0GB 64 位操作系统。
软件环境:window 10 ,虚拟机,Ubuntu 系统。
3 需求分析
根据网络应用程序的特点,网络在线聊天系统应就有即时,快速的特点。服务器端和客
户端应就有不同的功能特性。对于服务器端应能够正确地建立与客户端的连接并能正确地
断开,能即时地接收、处理和发送接收到的数据。能及时地通知在线用户当前好友在线状
况,能够处理非正常数据的能力。对于客户端应能够快速地检查是否能够连接到服务器端。
能正确的获得和反映当前好友在线情况。能够正确的与特定好友交流。能及时地接收到服
务器端地数据,并能即时处理数据,并能将处理结果反映给用户。
服务器端:
1.能够正确地、无冲突地启动服务器。
2.监听指定的端口,等待用户的连接。
3.建立与客户端的逻辑连接,并能通知其他好友。
4.向新进入的好友发出已上线的好友名单。
5.接收客户端的消息请求,并能正确无误地处理消息,并能发出消息到客户端。
6.反映当前在线人数和在线好友状况。
7.及时地反映发出地消息和聊天消息。
8.当好友断开与服务器端地连接时,服务器能够正确地断开连接,并通知其他用户。
9.当用户违反聊天系统规定时,服务器系统管理员能够断开与此用户的连接。
10.当服务器关闭时,应通知所有用户。
客户端:
1.能够正确启动应用程序,并能向服务器发出连接请求。
2.反映当前好友在线情况。
3.能够向群体或指定好友发出消息。
4.能够及时接收好友发出消息,并通知用户。
5.能够正确地断开与服务器端地的连接。
4 概要设计
4.1 设计思想
本聊天室系统采用了 c/s 形式。服务器主要是处理客户输入信息。首先要存储客户的个人资料,相
当于注册。再有,在客户的聊天信息时,也要记录下客户的聊天记录,已备查看聊天记录所用。当然,
服务器还有自己的动态数据处理。客户状态分为链接客户和非连接客户,我采用结构体存储链接客户信
息,以链表来记录链接客户。而链接客户又分为登陆客户和未登陆客户,这就通过修改链表上客户的名
字。当客户一链接客户服务端时,就给客户一个账号,也就是相当于注册信息,同时并发服务器一直在
为连接用户创建线程。
4.2 服务器功能描述
服务器主要是负责监听客户端发送来的消息,利用 TCP 线程并发服务器模型实现对客户端的监听接
收。
服务器程序的作用为:初始化服务器程序,持续监听一个固定的端口,收到客户的连接后建立一个
socket 连接,与客户进行通信和信息处理,接收客户通过 socket 连接发送来的数据,创建一个新的
socket;通过 socket 连接与客户通信,进行响应处理,并返回结果,通信结束后终端与客户的连接(关
闭 socket);主要的过程为服务器创建一个共享内存空间函数,以及客户端简单的界面,利用套接字模
型机制实现服务器简易模型的实现,利用 socket()创建流式套接字,并可以返回套接自号;利用 bind()
实现套接字与本地地址相连,listen()通知 TCP 服务器准备好监听客户端的连接,accept()接收连接,
等待客户端的连接,建立连接之后 accept 返回新的标识客户端的套接字,运用多线程以及 recv()/send()
接收发送数据;
4.3 客户端的功能描述
客户端主要用来向服务器端发送数据,客户端程序的作用:初始化客户程序,连接到某个服务器上,
建立 socket 连接,通过 socket 连接向服务器发送请求信息,通信结束后中断与客户的连接。主要的实
现步骤为:需要定义运行时候需要的参数,同样利用 socket()建立流式套接字,返回套接字号,connect()
将套接字与远程主机连接,recv()和 send()将套接字上的读写数据进行发送与接收,close()关闭套接
字,关闭对话。
5 总体设计
5.1 系统功能流程图
当客户端发送信息时,服务器将信息共享到其他用户端,与此同时当其他用户发送信息时服务器也
将信息发送到本地端,多人聊天室程序的系统功能流程图,
图 5.1 聊天室的功能流程图
5.2 系统操作流程图
首先运行服务器端程序,通过 Socket()函数会建立一个套接字,然后通过 Bind()函数绑
定一个端口,然后调用 Listen()在套接字指定的端口上开始倾听,利用 Accept()从完全建
立连接的队列中接受一个连接,连接获得后使用 Read()和 Write()函数进行通信。通信结束
后调用 Close()关闭套接字描述符。
运行客户端的程序,调用 Socket()函数建立一个套接字,使用 Connect()函数与服务器
端进行连接,连接完成后,使用 Write()和 Read()与服务器端进行通信,通信结束后调用
close()关闭套接字描述符。系统操作流程图如图 5.2 所示:
图 5.2 系统操作流程图
6 详细设计与实现
6.1 服务器进行编译执行
6.2 客户端进行编译执行
6.3 服务器进行注册,创建用户名和密码
6.4 使用注册的账户和密码进行登录操作
6.5 从客户端发送消息给服务端,服务端并成功接收