网络编程项目框架内容

基于TCP的云端书阅管理系统

通过网络实现图书借阅网站,包括服务器与客户端,客户端与服务器是基于TCP连接。

客户端描述:客户端运行会与服务器端进行连接,连接成功后,显示注册登录界面。此时,客户端可以选择注册一个新账号,然后把注册的新账号信息发送给服务器端,服务器端验证是新用户后,会把注册成功的信息通知客户端。注册成功后,客户端选择登录账号,将输入的账号信息发送给服务器端验证是否存在此用户,若存在此用户,服务器端就会通知客户端登录成功。登录成功后,用户客户端可以完成以下操作:

  1. 更新书籍
  2. 查询书籍信息
  3. 借阅书籍
  4. 归还书籍
  5. 查看借阅书籍的历史记录

服务器端功能描述:服务器端启动后,等待客户端进行连接。然后完成以下操作:

  1. 创建用户表、书籍表、借阅历史记录表
  2. 接受用户的注册信息,账号信息不能重复
  3. 接受用户的登录信息
  4. 将书籍信息写入书籍数据表中
  5. 从书籍数据表中查询对应的书籍信息
  6. 借阅书籍后,书籍数据表中对应的书籍数量减1,如果书籍数量为0,则提示书籍数量不足;借阅书籍的同时,将该书籍的信息以及借阅时间插入到借阅历史记录表中
  7. 归还书籍后,书籍数据表中对应的书籍数量加1
  8. 查询借阅历史记录

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 指针作为数据包的缓冲的包头

};

数据包接受端:接受到数据后,分成两次读取一个数据包,第一次读取首先读取一个数据包头长度,然后根据数据包头中的数据长度读取整个数据包。这样一个一个的数据包就分别被读取出来。数据包协议总结:协议是数据的收发端之间一种约定要好的一种规定。发送者按照该格式发送,接受者按照该格式进行解析。

数据管理

服务器端接收所有客户端的信息,将所有的账号、密码以及书籍信息记录在数据库中统一管理。

用户信息表:用户名、密码

书籍信息表:书名、作者名、书籍数量

借阅历史记录表:用户名、借阅的书名、借阅的日期

相关推荐
weixin_4426434227 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
阑梦清川41 分钟前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
FeelTouch Labs2 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
EricWang13583 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
我是谁??3 小时前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
长弓三石4 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
希言JY4 小时前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
xianwu5434 小时前
反向代理模块
linux·开发语言·网络·git
午言若4 小时前
C语言比较两个字符串是否相同
c语言