欢迎来到天天文库
浏览记录
ID:35209210
大小:35.13 KB
页数:17页
时间:2019-03-21
《使用tcp协议实现文件传输》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、使用TCP协议实现文件传输2013-01-1810:35:43 我来说两句 作者:hanchaoqi收藏 我要投稿使用TCP协议实现文件传输。程序会分为服务器端和客户端,首先运行服务器端,监听来自客户端的连接,客户端运行后会通过程序内的服务器端IP地址,向服务器发送连接请求。双方建立请求之后,客户端将所需文件的文件名和绝对路径传输给服务器,如果服务器找到此文件,则将此文件传输给客户端,然后断开连接。 具体算法描述如下: 【1】服务器端: 1、初始化socket服务 2、监听连接请求并做相应
2、的处理 2.1创建监听套接字 2.2监听套接口 2.3接受套接字的连接 2.4接收客户端传来的数据 case文件绝对路径: 按照路径找到文件,并打开。提取本地文件名,发回给客户端 发送文件总长度给客户端 case已准备接收文件完毕 if发送缓冲区为空 读取文件,写入缓冲区 将文件流分成大小相同的组(最后一组可能会小一点),顺次发送给客户端 将缓冲区清空 case文件成功传送 打印消息,退出 case文件已存在 打印消息,退出 2.5关闭同客户端的连接 3、释放socket服务 【2】客户端: 1、初始化s
3、ocket,winsock服务 2、连接服务器,进行数据的传输 2.1初始化,创建套接字 2.2通过IP地址,向服务器发送连接请求,建立连接 2.3主动发送所求文件绝对路径 2.4接受服务器端数据并做相应处理 case打开文件错误: 重新发送文件绝对路径至服务器,请求重发 case文件长度: 打印消息 case文件名: if文件已经存在 发送“文件已经存在” else 分配缓冲区,并向服务器发送“Ready”消息 case文件流: 为已接收文件名创建文件 打开文件,将文件流数据写入文件,直至接收所有分组数
4、据 发送“成功接收“消息 3、关闭套接字 释放服务 源程序: 【1】服务器端: 头文件: [cpp] /*server.h*/ #pragmacomment(lib,"WS2_32") #include #include #include #include #ifndefCOMMONDEF_H #defineCOMMONDEF_H #defineMAX_PACKET_SIZE 10240 //数据包的最大长度,单位是s
5、izeof(char) #defineMAXFILEDIRLENGTH256 //存放文件路径的最大长度 #definePORT 4096 //端口号 //#defineSERVER_IP "127.0.0.1"//server端的IP地址 //各种消息的宏定义 #defineINVALID_MSG -1 //无效的消息标识 #defineMSG_FILENAME 1 //文件的名称 #defineMSG_FILELENGTH 2 //传送文件的长度 #defineMSG_CLIENT_R
6、EADY 3 //客户端准备接收文件 #defineMSG_FILE 4 //传送文件 #defineMSG_SENDFILESUCCESS 5 //传送文件成功 #defineMSG_OPENFILE_ERROR 10 //打开文件失败,可能是文件路径错误找不到文件等原因 #defineMSG_FILEALREADYEXIT_ERROR11 //要保存的文件已经存在了 classCCSDef { public: #pragmapack(1) //使结构体的数据按照1字节来对齐,省空间 //
7、消息头 structTMSG_HEADER { char cMsgID; //消息标识 TMSG_HEADER(charMsgID=INVALID_MSG) :cMsgID(MsgID) { } }; //请求传送的文件名 //客户端传给服务器端的是全路径名称 //服务器传回给客户端的是文件名 structTMSG_FILENAME:publicTMSG_HEADER { charszFileName[256]; //保存文件名的字符数组 TMSG_FILENAME()
8、 :TMSG_HEADER(MSG_FILENAME) { } }; //传送文件长度 structTMSG_FILELENGTH:publicTMSG_HEADER { longlLength; TMSG_FILELENGTH(longlength) :TMSG_HEADER(MSG_FILELENGTH),lLength(length) { } }; //Client端已经准备好了,要求Ser
此文档下载收益归作者所有