程序代写代做 c/c++ Computer Network Project Socket Programming

Computer Network Project Socket Programming

成绩构成
• 作业:20% • 项目:30% • quiz:10% • 期末:40%
• 考勤为倒扣,旷课一次3分,请假/迟到/早退一 次1分

概述
• 完成一个文件共享系统
• C/S模式:fileclient.exe和fileserver.exe • 基于TCP协议
• 命令行方式运行
• 服务器端设定一个共享目录,向客户端提供该目录下文件的访问服务 • 客户端向服务器端发送请求,服务器端返回对应的结果
• 获取文件列表 • 下载文件
• 上传文件

使用方法
• 采用命令行+参数的方式 • 服务器端
Ø fileserver -p 5000 -s d:\test //设置服务器侦听端口和共享目录 • 客户端
Ø fileclient -h 202.112.100.10 -p 5000 -f //连接服务器并获得文件列表 Ø fileclient -h 202.112.100.10 -p 5000 -d xxx.txt yyy.txt //从服
务器下载文件xxx.txt并另存为yyy.txt(可以加路径)
Ø fileclient -h 202.112.100.10 -p 5000 -u xxx.txt yyy.txt //把本
地文件xxx.txt上传到服务器,文件保存为yyy.txt(可以加路径)
• 必须支持以上使用方式,参数顺序不变,若参数错误时必须显示出错误信息

参数说明
•-p5000 设置端口
• -s d:\test 设置文件共享目录
• -f /获得文件列表
• -d xxx.txt yyy.txt 从服务器下载文件xxx.txt并另存为yyy.txt(可以加路 径)
• -u xxx.txt yyy.txt //把本地文件xxx.txt上传到服务器,文件保存为yyy.txt (可以加路径)

应用层协议规范
• operator
• 指定操作类型
• 16bit
• 使用network order • checksum
• 16bit
• 整个消息的校验值 • length
• 32bit
• 整个消息的长度(包括头部长度) • 按字节计算
• 使用network order
• data
• 需要传输的数据 • 不定长
0 16 31
operator
checksum
length
data

应用层协议规范
operator
• 16bit,操作类型,使用network order
• 0:获取文件列表
• 1:返回文件列表(服务器端)
• 100:下载文件(文件信息在data中给出)
• 101:返回文件(服务器端)
• 200:上传文件(文件信息在data中给出)
• 201:返回上传结果(服务器端)
• 301:错误信息(服务器端)
0 16 31
operator
checksum
length
data

应用层协议规范
checksum
• 16bit
• 整个消息的校验值
• 与TCP校验值的计算方法相同
• 如果校验值错误,服务器端将返回301 • 如果校验值错误,客户端将忽略本消息
0 16 31
operator
checksum
length
data

应用层协议规范
length
• 32bit,使用network order
• 以字节计算
• 整个消息的长度(即数据部分
最多232 – 1 – 8个字节)
0 16 31
operator
checksum
length
data

不同operator下的data格式
operator=0 • 获取文件列表
• 客户端发送 data
•无
• 若有数据也无需处理
0 16 31
operator
checksum
length

不同operator下的data格式 operator=1
• 返回文件列表 • 服务器端发送
data
• 以一系列文件记录组成
• (文件名长度,文件名)
• Filename Length:
• 按字节计数,使用network order • Filename
0 16 31
Filename Length
Filename
Filename
• 文件全名(包括子目录)
• 使用Windows记法,如:ex1\sub1\test.txt

不同operator下的data格式 operator=100
• 下载指定文件 • 客户端发送
data
• 以一条文件记录组成
• (文件名长度,文件名)
• Filename Length:
• 按字节计数,使用network order • Filename
0 16 31
Filename Length
Filename
Filename
• 文件全名(包括子目录)
• 使用Windows记法,如:ex1\sub1\test.txt

不同operator下的data格式 operator=101
• 返回指定文件内容 • 服务器端发送
data
• 文件名长度,文件名,文
件内容
0 16 31
Filename Length
Filename
Filename
File Content

不同operator下的data格式 operator=200
• 上传指定文件 • 客户端发送
data
• 文件名长度,文件名,文件 内容
• 不定长
0 16 31
Filename Length
Filename
Filename
File Content

不同operator下的data格式 operator=201
• 返回上传操作结果 • 服务器端发送
data
• 32bit
• 文件长度(按字节计算) • 使用network order
0 16 31
File Length

不同operator下的data格式 operator=301
• 返回错误信息 • 服务器端发送
data
• 不定长(长度可由消息长度-8得到) • 错误信息描述
• 需自定义错误信息(中英文均可)
• 文件不存在
• 磁盘容量不足
• 校验值错误
• operator错误(如不存在的operator,或发送主体错误) • ……
0 16 31
Error Information

提交资料
• 源程序
• 编译后的可运行程序
• 设计报告
• 压缩成zip文件:学号_姓名 _Project.zip
• 不接受rar、7z等其他压缩格式 文件(拒绝解压缩并判0分)
Ø 学号_姓名_Project Ø client
• xx.cpp
• …… Ø server
• xx.cpp
• …… Ø exe
• fileclient.exe
• fileserver.exe Ø 学号_姓名.docx

编译要求
• 代码所用语言必须为C/C++
• 所提交的源代码必须能够在VC6.0或VS 2019下成功编译
• 程序必须在Windows 10下成功执行
• 必须提交对应的项目文件(如xx.dsw或xx.sln等)及相关文件 • 例外:
• 允许使用Linux+gcc
• 必须提供makefile文件(否则项目被判无效)
• 该情况下程序必须能够在Ubuntu 16.04下正确执行

关键技术点
• 注意字节序的转换:传输时都是网络顺序(network order),本地 处理都是主机顺序(host order)
• 参考https://blog.csdn.net/myyllove/article/details/83380209 • 相关函数htons(),ntohl(),ntohs(),htons()
• 参数由命令行输入,需要能够处理命令行参数 • int main(int argc, char** argv)
• 不可以使用第三方类库(如对socket封装的库) • 需要考虑服务器共享文件夹的子文件夹

设计文档
• 所提交文档说明(文件名及对应的功能) • 只需说明.h,.c,.cpp文件
• 服务器端/客户端程序设计结构说明 • 服务器端/客户端程序运行结果截图

项目测试
• 所完成客户端必须能与所完成服务器端正确通信 • 后期将提供测试客户端和服务器端(5.1后)
• 测试客户端需能与所完成服务器端正确通信 • 所完成客户端需能与测试服务器端正确通信

计分规则
• 总分:100
• 服务器端:50 • 客户端:30
• 报告:20
• 额外加分:20
• 服务器端实现了多线程,允许多客户端并行连接
• 此项奖励必须在服务器端、客户端、报告均完成(不要求满 分)的基础上

提交方式
• 智慧树
• 截止日期:2020.5.11 23:59:59
• 惩罚:迟交一天扣10%,5天后不接受任何提交
• 请勿抄袭,一经发现,抄袭者与被抄袭者均判为0分