程序分析:
Server:
server -port <integer between 1 and 65535> -data <folder to store information> -proc_count <positive integer>
支持多客户端
port 可选,默认3000, 合法是“1到65535”(输入错误需要显示)
data 可选,默认是 用户根目录的 serverdata,不存在则创建,(注意对该目录是否有创建和修改的权限,提示优雅)
proc_count:可选,默认为2, 整形
功能:
启动: 检查 data folder是否可访问,并绑定到端口,加载数据到内存,创建 port_count 个数的线程
运行: 接收client请求,并作出处理; 定期回写内存数据到xml
结束: 保存数据到xml,关闭
功能: birds.xml 包含birds信息,有 name color weight height四个属性; sightings.xml 包含每个鸟的 location和time。 启动时将数据加载到内存,定期从内存向xml 保存, 关闭时保存到xml文件
Client:
-serverPort <integer> -addbird -addsighting -listbirds -listsightings -remove -quit
serverPort 默认3000,代表服务器端口
其他只能出现一个,执行完后客户端结束
addbird: 要求输入 name color weight height。 将信息通过tcp传递。 server解析插入数据结构,name存在,返回错误信息;插入成功返回成功,客户端显示“"Bird<name> successfully added to the database"”
addsighting: enter the bird name, location, date and time, 成功和失败返回信息如上,name不唯一
remove:传递name,删除bird信息
quit: 关闭服务器
listbirds: 客户端接收所有的brid信息,以表格显示,按name排序,并输出总数
listsighting: 输入bird的name, 开始和结束date ,bird 名字支持正则表达式,以表格显示 name ,date,先按name再按time排序
设计:
服务器端:
1. 使用ctl 进行参数管理 (CTL 三个都用了): 参数错误时返回信息
2. 使用 dom4j 加载和回写xml文件
3. 使用pool 的线程池
4. 多线程程序的创建
5. tcp socket的实现
6. 消息格式