基于TCP的云端书阅管理系统
通过网络实现图书借阅网站,包括服务器与客户端,客户端与服务器是基于TCP连接。
客户端描述:客户端运行会与服务器端进行连接,连接成功后,显示注册登录界面。此时,客户端可以选择注册一个新账号,然后把注册的新账号信息发送给服务器端,服务器端验证是新用户后,会把注册成功的信息通知客户端。注册成功后,客户端选择登录账号,将输入的账号信息发送给服务器端验证是否存在此用户,若存在此用户,服务器端就会通知客户端登录成功。登录成功后,用户客户端可以完成以下操作:
- 更新书籍
- 查询书籍信息
- 借阅书籍
- 归还书籍
- 查看借阅书籍的历史记录
服务器端功能描述:服务器端启动后,等待客户端进行连接。然后完成以下操作:
- 创建用户表、书籍表、借阅历史记录表
- 接受用户的注册信息,账号信息不能重复
- 接受用户的登录信息
- 将书籍信息写入书籍数据表中
- 从书籍数据表中查询对应的书籍信息
- 借阅书籍后,书籍数据表中对应的书籍数量减1,如果书籍数量为0,则提示书籍数量不足;借阅书籍的同时,将该书籍的信息以及借阅时间插入到借阅历史记录表中
- 归还书籍后,书籍数据表中对应的书籍数量加1
- 查询借阅历史记录
Socket 编程
启动服务端程序,监听端口,等待客户端连接。完成客户端与服务端简单的TCP连接。使用线程完成客户端与服务端之间的一对多的连接。服务端显示每个客户端的基本信息:每个客户端的IP、端口等信息。
数据包协议
客户端使用 TCP 连接服务端后,发送接受数据使用数据封包。封包格式如下: | 协议版本(1) | 数据包类型(1)| 数据包的长度(2)| 数据包的内容(变长)|
协议版本:发送端填充自己的该数据包的版本信息,服务端接受数据包后,查看该版本是否是自己能识别的版本。是则进行解析,否则作为非法数据包(一般丢弃)。数据包类型:发送端根据自己发送的数据包里面的数据内容的不同填充不同的类型。 如:如果数据包的数据信息是登录信息,类型为0x0001。如果是断开连接的信息则类型为 0x0002。这样接收端接受到数据之后就可以根据数据类型的值,对数据做不同的处理。数据包的长度:TCP 是数据流协议,数据发送者多次发送的数据,但在 tcp 的接受端缓冲区内数据与数据之间没有间隔,无法分开,所以在数据包中增加一项数据长度。这样接收端可以根据数据长度信息确定本数据包的长度,确定要从 tcp 的缓冲区内每次要读取的长度。 数据包内容:要发送的数据。 数据包发送者:在发送数据前,在数据前增加数据包头。数据包头包含以上的包头信息。封包可以采用数据结构:
struct pack_head
{
unsigned char ver;
unsigned char type;
unsigned short len;
char buf[0];//buf 指针作为数据包的缓冲的包头
};
数据包接受端:接受到数据后,分成两次读取一个数据包,第一次读取首先读取一个数据包头长度,然后根据数据包头中的数据长度读取整个数据包。这样一个一个的数据包就分别被读取出来。数据包协议总结:协议是数据的收发端之间一种约定要好的一种规定。发送者按照该格式发送,接受者按照该格式进行解析。
数据管理
服务器端接收所有客户端的信息,将所有的账号、密码以及书籍信息记录在数据库中统一管理。
用户信息表:用户名、密码
书籍信息表:书名、作者名、书籍数量
借阅历史记录表:用户名、借阅的书名、借阅的日期