局域网文件传输

局域网文件传输的设计与实现

摘   要

随着互联网技术的迅猛发展,计算机通信给人类文明带来了翻天覆地的变化。很多情况下,人们的日常工作需要借助文件传输来完成。但大多数文件传输功能都需要借助移动磁盘等硬件设备或Internet上的服务器才能实现。这就给那些具有大规模内部网络的用户造成了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工作效率等。为了方便局域网内主机的资源共享,需要开发一个基于局域网的文件传输工具,在内部网络中实现文件交换。

基于局域网的文件传输系统的设计选用Virtual Studio 2008 为开发工具,以C/S模式通过建立Socket连接后实现局域网快速,准确,安全的点对点文件以及文件夹传输功能。本系统能够促进局域网内用户之间的文件资源共享,满足主机之间信息交流,确保文件及文件夹传输安全性,有效地提高工作效率。

设计共分为五大模块,分别为:一、介绍选题背景及意义和国内外研究现状;二、介绍TCP/IP点对点协议技术,C/S架构的MFC程序设计技术和Socket网络编程技术;三、对当前局域网文件传输进行需求分析并提出解决方案;四、根据解决方案对系统进行设计;五、对基于局域网的文件传输系统进行测试并得到测试结果。

关键词  C/S结构;网络通讯组件;点对点;Socket连接


LAN Design and Implementation of File Transfer

Abstract

With the rapid development of Internet technology, computer communications to the human civilization has brought tremendous changes. In many cases, people's daily work to be done with the file transfer. However, most file transfer needs with a removable disk and other hardware devices or servers on the Internet can be achieved. This internal network to those users with large-scale caused many problems, such as a waste of money, a waste of network resources, virus attacks, reduced work efficiency. In order to facilitate resource sharing on machines within the LAN, you need to develop a LAN-based file transfer tool, in the internal network for file exchange.

LAN-based file transfer system designed for the selection of Virtual Studio 2008 development tools to C / S mode to achieve through the establishment of local area network Socket connection fast, accurate and secure files and folders point to point transmission. The system can promote the local area network file sharing between users, to meet the information exchange between the host, transfer files and folders to ensure safety, effectively improve the work efficiency.

Design is divided into five modules, namely: I, introduce the research background and significance and research status; II introduces TCP / IP point to point protocol technology, C / S architecture MFC Socket programming techniques and network programming ; III LAN file transfer on the current needs analysis and propose solutions; four, according to the system design solution; five, LAN-based file transfer system to test and get test results.

Keywords  C

 / S structure;network communication components; point; Socket Connection

目   录

摘要…… I

Abstract II

第1章 绪论

1.1 选题目的和意义

1.2 国内外文献综述

1.3 论文研究内容

第2章 网络相关知识

2.1 TCP/IP协议

2.2 主要协议

2.2.1 IP协议

2.2.2 TCP协议

2.2.3 UDP

2.2.4 ICMP

2.3 TCP/IP端口

2.4 IP地址

2.5 C/S构架

2.5.1 C/S架构软件的优势与劣势

2.6 客户端(Client)

2.7 服务器(Server)

2.8 Socket编程

2.9 主要函数介绍

2.9.1 Accept

2.9.2 Bind

2.9.3 connect

2.9.4 htonl

2.9.5 Htons

2.9.6 inet_addr  

2.9.7 inet_aton  

2.9.8 inet_ntoa

2.9.9 listen  

2.10 本章小结

第3章 文件传输

3.1 文件传输的软件

3.2 文件传输的测试

3.2.1 打开文件

3.2.2 设置服务器

3.2.3 传输准备

3.2.4 实现传输

3.3 本章小结

第4章 软件设计

4.1 客户端设计

4.2 服务器设计

4.3 自定义消息

4.4 消息映射

4.5 消息处理函数

第5章 结   论

参考文献

  1.  绪论
    1. 选题目的和意义

随着网络通信技术的发展与用户需求日益多样化,现代局域网络正处在变革与发展之中,本课题的主要目的之一是为了更清晰地培养学生掌握科学研究方法的能力和使学生迅速体会文件传输系统的研发过程。基于局域网的文件传输系统能够让家庭网络以及各个企业等局域网对内部资料有一个快捷,准确,安全的共享。特别是对如今较大系统研发的模块分工合作得到了绝对保密性,从而使各项工作有计划、更科学的进行及顺利完成,使企业的办事效率得到显著提高。文件传输系统主要功能是用户确定的主机名,IP地址以及工作组名字,最终以C/S模式通过TCP/IP协议实现点到点文件传输功能。

本系统既锻炼了我们的实际动手能力,使我们将大学四年所学的理论知识与实际开发相结合,又引导我们进行了一次模拟实际产品的开发,对于我们以后工作能力的培养具有重要的意义。

    1. 国内外文献综述

目前,国内外企业对局域网的文件传输系统认识和使用情况并不好,各个企业单位在局域网内实现文件传输,资源共享还有很大的缺陷。技术无论是从理论上或实践上都还不够完善。文件传输系统由于比较复杂,可变因素较多,安全性低,因此发展还不成熟。

但是随着科学技术的发展,各种以局域网为单位的文件传输系统已经进入稳健发展期,比如说市面上比较普遍使用的QQ、UC、飞鸽传书等以内部网络为中心的资源共享系统也即将进入高速发展期。在国内,随着企业资源管理的规范化和规模的不断扩大,企业的计算机资源管理将不仅仅停留在依靠硬件或者Internet网络获取,而且将会向着安全的内部网络化资源管理方式迈进。

    1. 论文研究内容

计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以 JPEG 格式保存并且文件扩展名为 .jpg)。文件传输需要经过两个步骤,一是网络的链接;二是文件的传输

本文提出的方案主要是在满足局域网内链路状态良好,ip地址已知的条件下的文件传输。

主要步骤如下:

1. 运行软件,建立服务器

2.打开所要发送的文件,使其处于准备状态

3. 输入IP地址、端口号,链接服务器

4. 发送文件

  1.  网络相关知识

本章主要介绍一些TCP/IP协议、C/S构架、socket网络编程技术

    1.  TCP/IP协议 

TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:  

应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。  

传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。  

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。  

网络接口层(主机-网络层):接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

    1. 主要协议
      1. IP协议

网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。  高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。 

      1. TCP协议

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。  

      1. UDP

UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。 

      1. ICMP

ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。

    1. TCP/IP端口

TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。  两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:  

源IP地址 发送包的IP地址。 

目的IP地址 接收包的IP地址。 

源端口 源系统上的连接的端口。 

目的端口 目的系统上的连接的端口。  

端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

    1. IP地址

在Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机。为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样,才不至于在传输资料时出现混乱。  

Internet的网络地址是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。 

我们都已经知道,Internet是由几千万台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。  

目前,在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1,这种书写方法叫做点数表示法。    

    1. C/S构架

C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

      1. C/S架构软件的优势与劣势
        1. 应用服务器运行数据负荷较轻

最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。

        1. 数据的储存管理功能较为透明

在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络。在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。

        1. C/S架构的劣势是高昂的维护成本且投资大

首先,采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。

其次,传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。在JAVA这样的跨平台语言出现之后,B/S架构更是猛烈冲击C/S,并对其形成威胁和挑战。

    1. 客户端(Client)

客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。

    1. 服务器(Server)

服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。相对于普通PC来说,服务器在稳定性、安全性、性能等方面都要求更高,因此CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。

    1. Socket编程

以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套microsoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种应用程序为Windows Sockets应用程序。Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口.应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。

    1. 主要函数介绍
      1. Accept

定义函数   int accept(int s,struct sockaddr * addr,int * addrlen); 

函数说明   accept()用来接受参数s的socket连线。参数s的socket必需先经bind()、listen()函数处理过,当有连线进来时accept()会返回一个新的socket处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s的socket能继续使用accept()来接受新的连线要求。连线成功时,参数addr所指的结构会被系统填入远程主机的地址数据,参数addrlen为scokaddr的结构长度。 

  返回值  成功则返回新的socket处理代码,失败返回-1,错误原因存于errno中。错误代码 

EBADF 参数s 非合法socket处理代码。 

EFAULT 参数addr指针指向无法存取的内存空间。 

ENOTSOCK 参数s为一文件描述词,非socket。 

EOPNOTSUPP 指定的socket并非SOCK_STREAM。 

EPERM 防火墙拒绝此连线。 

ENOBUFS 系统的缓冲内存不足。 

ENOMEM 核心内存不足。  

      1. Bind

定义函数   int bind(int sockfd,struct sockaddr * my_addr,int addrlen); 

函数说明  bind()用来设置给参数sockfd的socket一个名称。此名称由参数my_addr指向一sockaddr结构,对于不同的socket domain定义了一个通用的数据结构 :

struct sockaddr 

unsigned short int sa_family; 

char sa_data[14]; 

}; 

sa_family 为调用socket()时的domain参数,即AF_xxxx值。 

sa_data 最多使用14个字符长度。 

此sockaddr结构会因使用不同的socket domain而有不同结构定义,例如使用 AF_INET domain,其socketaddr结构定义便为: 

struct socketaddr_in 

unsigned short int sin_family; 

uint16_t sin_port; 

struct in_addr sin_addr; 

unsigned char sin_zero[8]; 

}; 

struct in_addr 

uint32_t s_addr; 

}; 

sin_family 即为sa_family 

sin_port 为使用的port编号 

sin_addr.s_addr 为IP 地址 

sin_zero 未使用。  

参数  addrlen为sockaddr的结构长度。  

返回值  成功则返回0,失败返回-1,错误原因存于errno中。  

错误代码  :

EBADF 参数sockfd 非合法socket处理代码。 

EACCESS 权限不足 

ENOTSOCK 参数sockfd为一文件描述词,非socket。  

      1. connect

 定义函数  int connect (int sockfd,struct sockaddr * serv_addr,int addrlen); 

函数说明  connect()用来将参数sockfd 的socket 连至参数serv_addr 指定的网络地址。结构sockaddr请参考bind()。

参数addrlen为sockaddr的结构长度。 

返回值  成功则返回0,失败返回-1,错误原因存于errno中。

错误代码 

EBADF 参数sockfd 非合法socket处理代码

EFAULT 参数serv_addr指针指向无法存取的内存空间 

ENOTSOCK 参数sockfd为一文件描述词,非socket。

EISCONN 参数sockfd的socket已是连线状态 ECONNREFUSED 连线要求被server 端拒绝。 ETIMEDOUT 企图连线的操作超过限定时间仍未有响应。

ENETUNREACH 无法传送数据包至指定的主机。 EAFNOSUPPORT sockaddr结构 的 sa_family不正确。

EALREADY socket为不可阻断且先前的连线操作还未完成。 

      1. htonl

定义函数   unsigned long int htonl(unsigned long int hostlong);  

函数说明   htonl()用来将参数指定的32位hostlong 转换成网络字符顺序。  

返回值  返回对应的网络字符顺序。  

      1. Htons

定义函数  unsigned short int htons(unsigned short int hostshort); 

 函数说明   htons()用来将参数指定的16位hostshort转换成网络字符顺序。 

 返回值   返回对应的网络字符顺序。  

      1. inet_addr  

定义函数  unsigned long int inet_addr(const char *cp); 

函数说明  inet_addr()用来将参数cp所指的网络地址字符串转换成网络所使用的二进制数字。网络地址字符串是以数字和点组成的字符串,例如:“163.13.132.68”。  

返回值   成功则返回对应的网络二进制的数字,失败返回-1。

      1. inet_aton  

定义函数  int inet_aton(const char * cp,struct in_addr *inp); 

  函数说明  inet_aton()用来将参数cp所指的网络地址字符串转换成网络使用的二进制的数字,然后存于参数inp所指的in_addr结构中。 

结构in_addr定义如下 

struct in_addr 

unsigned long int s_addr; 

}; 

返回值  成功则返回非0值,失败则返回0。 

      1. inet_ntoa

定义函数  char * inet_ntoa(struct in_addr in); 

函数说明  inet_ntoa()用来将参数in所指的网络二进制的数字转换成网络地址,然后将指向此网络地址字符串的指针返回。 

  返回值   成功则返回字符串指针,失败则返回NULL。 

      1. listen  

定义函数  int listen(int s,int backlog); 

  函数说明  listen()用来等待参数s 的socket连线。参数backlog指定同时能处理的最大连接要求,如果连接数目达此上限则client端将收到ECONNREFUSED的错误。Listen()并未开始接收连线,只是设置socket为listen模式,真正接收client端连线的是accept()。通常listen()会在socket(),bind()之后调用,接着才调用accept()。 

返回值  成功则返回0,失败返回-1,错误原因存于errno 

附加说明  listen()只适用SOCK_STREAM或SOCK_SEQPACKET的socket类型。如果socket为AF_INET则参数backlog 最大值可设至128。 

 错误代码  

EBADF 参数sockfd非合法socket处理代码 

EACCESS 权限不足 

EOPNOTSUPP 指定的socket并未支援listen模式。 

    1. 本章小结

本章主要介绍了关于网络的知识,TCP/Ip协议的主要内容和组成形式,C/S模式的内容,Winsock的简单介绍。

  1. 文件传输
    1. 文件传输的软件

本次测试所需要的软件如图3-1所示。

图3-1 软件图标和运行情况

    1. 文件传输的测试
      1. 打开文件

单击Open按钮,如图3-2,在弹出的打开文件对话框中选择你所要传输的文件。单击确认。

  

图3-2 Open按钮打开文件

图3-3 选择文件

图3-4 文件选择成功

      1. 设置服务器

在同一局域网的另一台及其上再运行一次此软件,并设置成服务器。如图3-5。

图3-5 设置成服务器

      1. 传输准备

输入IP地址和端口号。如图3-6

图3-6

      1. 实现传输

单击Trans按钮,完成传输。如图3-6。

图3-6

    1. 本章小结

    本章测试了所编写的程序,简述了软件的操作过程,并给出了程序运行的结果。

  1. 软件设计

软件采用面向对像的设计方法,考虑到对计算效率的要求,采用C++编程语言,开发环境为Windows XP,编程工具为Visual Studio 2008,采用C++标准库函数和MFC类库。

特点:利用多线程并发处理,模拟了异步传输模式,并通过消息达到了子线程与主线程的通信。

图4-1 软件过程图

    1. 客户端设计

OnBnClickedOpenFile( ) 文件对话框的实现。

OnBnClickedTrans( ) 创建线程来进行传输。

    1. 服务器设计

OnBnClickedServer( ) 将软件设置成服务器模式,并创建服务线程,用于监听套接 字。

AcceptCtrlProc(LPVOID pParam) 负责接收链接,并创建接收线程。

SerCtrlProc(LPVOID pParam) 实现接收工作。

    1. 自定义消息

#define WM_FILEOPEN WM_USER+1

#define WM_CONNECTSUCESS WM_USER+2

#define WM_PROGRESS WM_USER+3

#define WM_TRANSCOMPELETE WM_USER+4

#define WM_ACCEPT WM_USER+5

    1. 消息映射

ON_MESSAGE(WM_FILEOPEN, OnFILEOPEN)

ON_MESSAGE(WM_CONNECTSUCESS, OnCONNECTSUCESS)

ON_MESSAGE(WM_PROGRESS, OnPROGRESS)

ON_MESSAGE(WM_TRANSCOMPELETE, OnTRANSCOMPELETE)

ON_MESSAGE(WM_ACCEPT,OnACCEPT)

    1. 消息处理函数

afx_msg LRESULT OnFILEOPEN(WPARAM wParam,LPARAM lParam);

处理打开文件的消息,在子线程中控制主线程的打开文件

afx_msg LRESULT OnPROGRESS(WPARAM wParam,LPARAM lParam);

处理进度条的消息,在子线程中控制主线程的进度条

afx_msg LRESULT OnCONNECTSUCESS(WPARAM wParam,LPARAM lParam);

连接状态显示的消息,在子线程中连接并将状态发送到主线程

afx_msg LRESULT OnTRANSCOMPELETE(WPARAM wParam,LPARAM lParam);

传输完成状态的消息,当子线程完成文件的传输时,想主线程发送此消息,告诉主线 程传输完毕afx_msg LRESULT OnACCEPT(WPARAM wParam,LPARAM lParam);

接收来自客户端的链接的消息,因为主线程创建了一个接收客户端请求的线程,当有 连接请求到达时,向主线程发送此消息。

  1. 结   论

本文较完整地讨论了网络和文件编程等相关技术的常用处理方法。针对网络文件传输问题,取得的研究成果如下(本文的主要工作如下):

1. 研究了局域网的工作模式,Windows下的网络编程。

2. 利用Winsocket的基本原理,实现了一种多线程模拟异步传输过程

综上所述,利用Winsock进行数据文件的传输,其特点是可控性强,实现灵活方便, 可根据需要将此功能扩展到广域网中, 使此方法的数据传输技术更加完善实用。今后的工作应该在广域网文件传输继续研究。

参考文献

1  李建华 王占全.Visual C++ 编程从基础到实践.电子工业出版社,2007:333~441

2  (美)Jones A ,Ohlund J . Windows网络编程技术 . 北京:机械工业出版社,2000.

3  编程高手工作室. Visual C++编程高手 . 北京:希望电子出版社,2000.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值