一个自定义文件传输协议的设计与实现

上传人:飞*** 文档编号:40771628 上传时间:2018-05-27 格式:DOCX 页数:22 大小:194.11KB
返回 下载 相关 举报
一个自定义文件传输协议的设计与实现_第1页
第1页 / 共22页
一个自定义文件传输协议的设计与实现_第2页
第2页 / 共22页
一个自定义文件传输协议的设计与实现_第3页
第3页 / 共22页
一个自定义文件传输协议的设计与实现_第4页
第4页 / 共22页
一个自定义文件传输协议的设计与实现_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《一个自定义文件传输协议的设计与实现》由会员分享,可在线阅读,更多相关《一个自定义文件传输协议的设计与实现(22页珍藏版)》请在金锄头文库上搜索。

1、 一个 CS 模式自定义文件传输协议的设计与实现班级:4099 硕学号:3114370082姓名:周啸林1协议需求分析1.1摘要摘要针对移动计算领域的“上传文件”这一场景,设计本协议。本报告描述了在客户端-服务器模式下,基于 UDP 的一个自定义文件传输协议(应用层)的设计与实现,并用该自定义的文件传输协议开发了一个小应用“UDP 文件传输精灵”(UDPFileTFGenius)来测试该协议。1.2功能描述功能描述UDPFileTFGenius 在应用层采用自定义的文件传输协议,传输层采用 UDP 协议,在 2台或多台(2 对 1 或多对一)计算机之间进行文件传输。软件分为客户端软件和服务器端

2、软件两个部分,分别安装在发送和接受计算机上,客户端作为发送端,可以将指定的文件发送到与之互联的服务器端,服务器端接收后保存文件。具体步骤为:1,在服务器端程序中设定服务器端网络端口;2,启动服务器端程序;3,在客户端程序中设定服务器端 IP 及网络端口及需要传输的文件;4,启动客户端程序,完成文件传输。2协议概要设计2.1开发环境开发环境采用 Visual studio 2010 集成开发环境,语言采用 C+。2.2系统框图系统框图初始化winsock创建UDP套接字发送文件数据关闭UDP套接字初始化winsock创建UDP套接字接收文件数据关闭UDP套接字客户端(发送端)服务器端(接收端)绑

3、定套接字进行数据传输时,不进行服务器端和客户端之间的连接操作,服务器端不监听是否有 客户端连接本机的网络端口,即接收数据。3协议详细设计3.1客户端函数模块客户端函数模块函数名int cilentSend(char *fileName)参数char *fileName,文件名称字符串指针功能初始化网络端口设置,绑定服务器端端口,从客户端向服务器端发送指定的文件SOCK_WSA_ERR (-1) /启动 winsock 失败SOCK_CRSOCK_ERR (-2) /创建 SOCKET 失败SOCK_BIND_ERR (-3) /绑定端口失败SOCK_SEND_ERR (-4) /发送数据失败S

4、OCK_CLOSE_ERR (-5) /关闭 SOCKET 失败SOCK_RECVE_ERR (-6) /接收数据失败(客户端不会返回此值)FILE_ERR (-7) /文件错误TRAN_SUCCESS 0 /传输成功函数名int fileSend(SOCKET s, SOCKADDR_IN addrReceive, char *filename)参数SOCKET s 套接字SOCKADDR_IN addrReceive 套接字结构体,包含端口、网络地址、协议类型等信息char *filename 待传输文件的文件名字符串指针功能通过套接字发送文件数据返回值SOCK_SEND_ERR (-4)

5、 /发送数据失败FIEL_ERR (-7) /文件错误TRAN_SUCCESS (-8) /传输成功函数名int winSocketInit()参数无功能winsocket 版本协商及 Winsock DLL 初始化返回值SOCK_WSA_ERR (-1) /启动 winsock 失败0 /winsock 初始化成功函数名void printReturn(int nRet)参数int nRet 错误代号功能输出最终运行错误/正常状态返回值无函数名long fileSize(FILE *stream)参数FILE *stream 文件指针功能计算文件大小(字节)返回值文件大小3.2服务器端函数模

6、块服务器端函数模块函数名int serverReceive()参数无功能初始化网络端口设置,接收发送至该端口的文件数据,根据发送端 IP 地址的不同创建不同的文件夹保存各发送端的文件。返回值SOCK_WSA_ERR(-1)/启动 winsock 失败SOCK_CRSOCK_ERR (-2)/创建套接字失败SOCK_BIND_ERR(-3)/绑定端口失败(服务器端不会返回此值)SOCK_SEND_ERR(-4)/发送数据失败(服务器端不会返回此值)SOCK_CLOSE_ERR (-5)/关闭 SOCKET 失败SOCK_RECVE_ERR (-6)/接受数据失败FILE_ERR (-7)/文件错

7、误TRAN_SUCCESS0/传输成功函数名int RecevData(SOCKET *s)参数SOCKET s 套接字功能接收通过套接字传入的文件数据,并根据发送端 IP 地址的不同分别保存。返回值SOCK_RECVE_ERR(-6)/接受数据失败FILE_ERR (-7)/文件错误TRAN_SUCCESS0/传输成功函数名int WinsocketInit()参数无功能winsocket 版本协商及 Winsock DLL 初始化返回值SOCK_WSA_ERR(-1)/启动 winsock 失败0 /初始化成功函数名void PrintReturn( int nRet)参数int nRet

8、 错误代号功能输出最终运行错误/正常状态返回值无4协议运行流程图4.1客户端协议流程图客户端协议流程图初初始始化化winsock是是否否成成功功创创建建UDP套套接接字字是是否否成成功功绑绑定定UDP套套接接字字是是否否成成功功按按分分块块大大小小发发送送 下下一一组组文文件件数数据据是是否否成成功功到到达达文文件件尾尾部部?关关闭闭套套接接字字输输出出最最终终运运行行 错错误误/正正常常状状态态结结束束是是是是是否否否否否否否否否否发发送送文文件件头头信信息息是是否否成成功功否否是4.2服务器端协议流程图服务器端协议流程图初初始始化化winsock是是否否成成功功接接收收文文件件头头信信息息

9、是是否否成成功功创创建建客客户户端端用用户户目目录录 按按分分块块大大小小接接收收 下下一一组组文文件件数数据据是是否否成成功功所所有有文文件件到到 达达文文件件尾尾部部?关关闭闭套套接接字字 将将不不同同客客户户端端的的发发来来文文 件件放放到到相相应应目目录录中中,输输出出最最终终运运行行 错错误误/正正常常状状态态结结束束是是是是否否否否否否否否5协议编码实现5.1客户端代码客户端代码/cilent.cpp v1.1,按照 UDPFileTF 协议发送文件数据,zhouxiaolin LMT 20141128。 #pragma comment( lib, “ws2_32.lib“ ) #

10、include #include #include “stdio.h“ #include #include using namespace std;/异常结果提示 #defineSOCK_WSA_ERR(-1) /启动 winsock 失败 #defineSOCK_CRSOCK_ERR(-2) /创建套接字失败 #defineSOCK_BIND_ERR(-3) /绑定端口失败 #defineSOCK_SEND_ERR(-4) /发送数据失败 #defineSOCK_CLOSE_ERR(-5) /关闭SOCKET 失败 #defineSOCK_RECVE_ERR(-6) /接受数据失败 #def

11、ineFILE_ERR (-7) /文件错误 #defineTRAN_SUCCESS0 /传输成功 /总体参数定义 #define SHOW_MIDDLE_STATUS /是否向控制台打印中间过程 #define SERVER_PORT 8000 /服务器端端口,文件接收端对应端口 #define SEND_BUFFER_SIZE 4096/文件分段发送时,每次发送大小 #define FILE_TO_SEND “cones.png“/待发送文件名称 #define SERVER_IP “127.0.0.1“/客户端(文件接收端)IP #define DELAY_TIME 50 struct

12、Fileinfo char fileName50; /文件名int fileBlock; /文件分块大小int BlockNum; /文件块数量unsigned long fileSize; /文件总大小 ;int ServerSend( char* FileName );/服务器发送文件函数,初始化网络端口设置,从服务器 端向客户端发送制定的文件 int FileSend( SOCKET s ,SOCKADDR_IN addrReceive ,char* filename );/发送文件函数,通过 套接字发送文件数据int WinsocketInit(void); /winsock 版本协商

13、及 Winsock DLL 初始化void PrintReturn( int nRet);/输出最终运行错误/正常状态long filesize(FILE *stream);/计算文件大小int nResult = 0;/错误信息变量/-void main() char filename256;memset( filename, 0x00, sizeof( filename ) ); strncpy( filename, FILE_TO_SEND, sizeof( filename) ); int nRet = ServerSend( filename); PrintReturn( nRet

14、); cout 0) /发送文件基本信息 unsigned int len = sizeof( fileinfo );nResult = sendto(s,(char *) cout #include #include #include #include #include using namespace std;/异常结果提示 #defineSOCK_WSA_ERR(-1) /启动 winsock 失败 #defineSOCK_CRSOCK_ERR(-2) /创建套接字失败 #defineSOCK_BIND_ERR(-3) /绑定端口失败 #defineSOCK_SEND_ERR(-4) /发送数据失败 #defineSOCK_CLOSE_ERR(-5) /关闭SOCKET 失败 #defineSOCK_RECVE_ERR(-6) /接受数据失败 #defineFILE_ERR (-7) /文件错误 #defineTRAN_SUCCESS0 /传输成功/总体参数定义 #define SHOW_MIDDLE_STATUS /是否向控制台打印中间过程 #define SERVER_PORT8000/端口 #define RECV_BUFFER_SIZE 4096/每次发送大小struct Fileinfo char fileName50; /文件名int fileBlock; /文

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号