可视化文件消息收发一体化Socket实现V0.1

简介: 本设计旨在通过socket的TCP实现不同类型文件的收发,UDP实现消息的收发。1.1 需求概述基本需求:1) 支持发送不同类型的文件(.txt,.doc,.jpg,.exe,.mp3等所有类型)2) 支持发送字符消息。3) 支持可视化、直观显示与操作。4) 支持单机收发、局域网内两台机器收发。

可视化文件消息收发一体化Socket实现V0.1

可视化文件消息一体化收发Socket实现V0.1 说明文档 下载地址:http://download.csdn.net/detail/wojiushiwo987/5149658


可视化文件消息一体化收发Socket实现V0.1 源码       下载地址:http://download.csdn.net/detail/wojiushiwo987/5149657




1概述

本设计旨在通过socket的TCP实现不同类型文件的收发,UDP实现消息的收发。


1.1 需求概述

基本需求:


1)  支持发送不同类型的文件(.txt,.doc,.jpg,.exe,.mp3等所有类型)


2)  支持发送字符消息。


3)  支持可视化、直观显示与操作。


4)  支持单机收发、局域网内两台机器收发。


1.2开发环境

编程语言:C++语言


开发及运行环境:Window操作系统、集成开发环境VS2008。


2界面设计

image.png

图2.1服务器端界面

image.png



图2.2客户端界面


3总体设计

          总体设计需要参照设计要求去设计。


        针对要求一:支持发送不同类型的文件(.txt,.doc,.jpg,.exe,.mp3等所有类型)。


         Socket实现通信自不必说,而文件的传输归根结底是文件的读、写。文件的读写涉及到文件的属性:文件的名称(含扩展名,所在路径名)、文件大小、文件内容信息。


        核心有三点:


     (1)读取文件的前提是知道文件的路径。文件的名称+文件所在的路径即为文件的绝对路径。而存储文件的时候也需要同发送文件名字相同存储,亦需要知道接收文件的路径。


    (2)发送、接收的过程都要涉及读取、接收累计字节的多少和文件大小比较,这也是验证文件是否读取完毕或者接收完毕的方法。


    (3)文件内容信息,即整个文件长度的字节数,可以循环读文件到buffer、写文件到buffer,最后写入磁盘路径来完成写入。


     文件的传输考虑到可靠传输,可以通过TCP套接字来实现。


     针对要求二:支持发送字符消息。


     发送字符消息,可以采取一端等待接收、一端发送消息的UDP套接字来实现。


      针对要求三:支持可视化、直观显示与操作。


        考虑到能直观显示指定发送源文件夹sourcefile,接收目标文件夹destfile里的内容。我们考虑采用listCtrl列表框通过图标+文件名称+扩展名的形式显示文件。且可以关联单击添加、左双击打开、右双击删除的操作。


        考虑到对接收到文件的直观显示,对于图片的显示,我们借鉴设计了缓存模式和存盘模式。缓存模式将接收到的文件显示在我们设定的区域。而对于硬盘模式,文件存储在对应磁盘的destfile文件夹下,同时在接收端的listctrl列表框会有对应图标显示。仅图片可以缓存模式显示,所有类型的文件都可以通过硬盘模式存储和直观显示。


       针对要求三:支持单击收发、两台机器收发。


        考虑到支持不同机器收发,我们设计了可配置的IP地址和端口号的模式。方便操作和实现。


4服务器端的核心设计流程

image.png

5客户端的核心设计流程

image.png

6  文件收发操作示例

步骤一:

image.png



图6.1服务器端配置完毕后


如图6.1所示,勾选服务器配置复选对话框,无需更改配置,单击配置完毕、单击启动服务,完成等待连接。此时选择的是缓存模式。


步骤二:

image.png

图6.2客户端选中待发送文件,点击接受按钮


如图6.2所示,点击文件发送list列表框,选择待发送的文件123.jpg。单击接受按钮,以等待接受UDP消息。已选框可以有多个不同类型的文件,但发送的时候,一次只能发送一个文件,以最后选择的文件为准。



步骤三:

image.png


图6.3客户端单击连接请求、发送按钮后


如图6.3所示,点击连接请求、发送按钮后,客户端显示文件发送滚动条完毕,发送状态栏记录了发送状态及发送的字节数。



服务器端接受发送文件后的界面如图6.4所示。


image.png

图6.4服务器端缓存接收发送文件后


     如图6.4所示,服务器端缓存接收文件会在右侧显示,左侧Socket状态栏会显示接收状态。


 


      同步骤1à步骤3,若改为硬盘模式接收。硬盘模式步骤3截图如下图6.5、图6.6:

image.png



        图6.5客户端单击连接请求、发送按钮后,发送sangfor.txt

image.png

图6.6服务器端硬盘模式接收,并双击Sangfor.txt打开后截图。


如图6.7,服务器端写入消息并单击发送按钮后,客户端能接收消息并显示。

image.png

图6.7客户端接收服务器端消息后显示



7  待扩展、完善功能

(1)      客户端现在一次仅能发送一个文件,可扩展至一次发送多个文件。


(2)      目前的连接、发送、接收,一次发送、一次接收完毕套接字即关闭,可扩展至建立连接后可持续发送。


发现bug请联系:ycy360@163.com


2013-3-16


相关文章
|
3月前
|
消息中间件 分布式计算 Kafka
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
40 0
|
7月前
|
存储 监控 Java
深入探索Java BIO与NIO输入输出模型:基于文件复制和socket通信
深入探索Java BIO与NIO输入输出模型:基于文件复制和socket通信
|
8月前
|
Arthas 测试技术
错误提示表明Arthas无法打开目标进程的socket文件
错误提示表明Arthas无法打开目标进程的socket文件
107 2
|
8月前
|
网络协议 安全 Python
socket客户端和服务端,文件的传输
socket 实现,客户端和服务端,文件的传输
101 1
|
安全 PHP
PHP-FPM没有生成socket文件
PHP-FPM没有生成socket文件
187 0
|
Oracle 关系型数据库 数据库
Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件
Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件
414 0
Python远程操作Oracle实现一键备份还原数据库演示,利用socket进行imp、exp一键导入导出oracle数据库dmp文件
|
3月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
33 0
|
6月前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
65 4
|
6月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
40 3
|
6月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
69 2