1、概述
本设计旨在通过socket的TCP实现不同类型文件的收发,UDP实现消息的收发。
1.1 需求概述
基本需求:
1) 支持发送不同类型的文件(.txt,.doc,.jpg,.exe,.mp3等所有类型)
2) 支持发送字符消息。
3) 支持可视化、直观显示与操作。
4) 支持单机收发、局域网内两台机器收发。
1.2开发环境
编程语言:C++语言
开发及运行环境:Window操作系统、集成开发环境VS2008。
2、界面设计
图2.1服务器端界面
图2.2客户端界面
3、总体设计
总体设计需要参照设计要求去设计。
针对要求一:支持发送不同类型的文件(.txt,.doc,.jpg,.exe,.mp3等所有类型)。
Socket实现通信自不必说,而文件的传输归根结底是文件的读、写。文件的读写涉及到文件的属性:文件的名称(含扩展名,所在路径名)、文件大小、文件内容信息。
核心有三点:
(1)读取文件的前提是知道文件的路径。文件的名称+文件所在的路径即为文件的绝对路径。而存储文件的时候也需要同发送文件名字相同存储,亦需要知道接收文件的路径。
(2)发送、接收的过程都要涉及读取、接收累计字节的多少和文件大小比较,这也是验证文件是否读取完毕或者接收完毕的方法。
(3)文件内容信息,即整个文件长度的字节数,可以循环读文件到buffer、写文件到buffer,最后写入磁盘路径来完成写入。
文件的传输考虑到可靠传输,可以通过TCP套接字来实现。
针对要求二:支持发送字符消息。
发送字符消息,可以采取一端等待接收、一端发送消息的UDP套接字来实现。
针对要求三:支持可视化、直观显示与操作。
考虑到能直观显示指定发送源文件夹sourcefile,接收目标文件夹destfile里的内容。我们考虑采用listCtrl列表框通过图标+文件名称+扩展名的形式显示文件。且可以关联单击添加、左双击打开、右双击删除的操作。
考虑到对接收到文件的直观显示,对于图片的显示,我们借鉴设计了缓存模式和存盘模式。缓存模式将接收到的文件显示在我们设定的区域。而对于硬盘模式,文件存储在对应磁盘的destfile文件夹下,同时在接收端的listctrl列表框会有对应图标显示。仅图片可以缓存模式显示,所有类型的文件都可以通过硬盘模式存储和直观显示。
针对要求四:支持单击收发、两台机器收发。
考虑到支持不同机器收发,我们设计了可配置的IP地址和端口号的模式。方便操作和实现。
4、服务器端的核心设计流程
5、客户端的核心设计流程
6、文件收发操作示例
步骤一:
图6.1服务器端配置完毕后
如图6.1所示,勾选服务器配置复选对话框,无需更改配置,单击配置完毕、单击启动服务,完成等待连接。此时选择的是缓存模式。
步骤二:
图6.2客户端选中待发送文件,点击接受按钮
如图6.2所示,点击文件发送list列表框,选择待发送的文件123.jpg。单击接受按钮,以等待接受UDP消息。已选框可以有多个不同类型的文件,但发送的时候,一次只能发送一个文件,以最后选择的文件为准。
步骤三:
图6.3客户端单击连接请求、发送按钮后
如图6.3所示,点击连接请求、发送按钮后,客户端显示文件发送滚动条完毕,发送状态栏记录了发送状态及发送的字节数。
服务器端接受发送文件后的界面如图6.4所示。
图6.4服务器端缓存接收发送文件后
如图6.4所示,服务器端缓存接收文件会在右侧显示,左侧Socket状态栏会显示接收状态。
同步骤1à步骤3,若改为硬盘模式接收。硬盘模式步骤3截图如下图6.5、图6.6:
图6.5客户端单击连接请求、发送按钮后,发送sangfor.txt
图6.6服务器端硬盘模式接收,并双击Sangfor.txt打开后截图。
如图6.7,服务器端写入消息并单击发送按钮后,客户端能接收消息并显示。
图6.7客户端接收服务器端消息后显示
7、待扩展、完善功能
(1)客户端现在一次仅能发送一个文件,可扩展至一次发送多个文件。
(2)目前的连接、发送、接收,一次发送、一次接收完毕套接字即关闭,可扩展至建立连接后可持续发送。
可视化文件消息一体化收发Socket实现V0.1 说明文档
下载地址:http://download.csdn.net/detail/wojiushiwo987/5149658
可视化文件消息一体化收发Socket实现V0.1 源码
下载地址:http://download.csdn.net/detail/wojiushiwo987/5149657
作者:铭毅天下
原文:https://blog.csdn.net/laoyang360/article/details/8681918