- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于多线程的网络文件传输工具的改造
基于多线程的网络文件传输工具的改造
1 引言
如今,随着计算机应用的普及,许多人也已经将进入Internet作为下一个计算机升级的目标,而用Internet进行文件传输,则是计算机联入Internet的一个重要功能之一。因此各种文件传输系统便应运而生,如邮件,聊天工具等。这些软件在使用上各有所长,但与此同时,其自身仍存在缺点和局限性,这些都给文件传输带来了很多不便。首先,对远程服务器的依赖导致有些文件传输工具不能完全实现点对点的文件传输,甚至对文件的安全造成了威胁。其次,这些传输工具只适宜传输体积较小的文件,如果传输的文件体积过大,则会耗费很长时间,进而导致资源的浪费,倘若网络速度不理想,更有可能会导致传输中断。因此,开发一个功能简单,易于操作,传输效率高的文件传输工具势在必行。
2环境与相关开发技术
2.1 Sock网络编程原理套接字(socket)是一种网络编程接口,实际上就是一个通信端点,提供了发送和接收数据的机制。而Winsock是基于Windows操作系统下的网络编程接口,也就是基于Socket模型的API。而最简单的一对一的CS结构的通信程序,就只有两个端点,即两个套接字(Socket),一个在Server端,另一个在Client端,这两个套接字就在CS间建立了双向数据传送的连接。每个套接字都有一个套接字地址,通常是IP和端口的组合。Socket分为阻塞模式和非阻塞模式:阻塞模式是指在指定套接字上调用函数执行操作时,在没有完成操作之前,函数不会立即返回。例如,服务器程序在阻塞模式下调用accept()函数时将会阻塞服务器线程,直至接收到一个来自客户端的连接请求。默认创建的套接字为阻塞模式。非阻塞模式是指在指定套接字上调用函数执行操作时,无论操作是否完成,函数都会立即返回。例如,在非阻塞模式下调用recv()函数时,程序会直接读取网络缓冲区中的数据,无论是否读到数据,函数都会立即返回,而不会一直挂在此函数的调用上。在并发线程模型中,服务器程序中使用了一个线程来等待客户端的连接请求,然后创建新线程与客户端进行通信。因为每个客户端都拥有一个专门的通信服务线程,所以能够很及时地与服务器程序进行通信,不需要等待其他客户端通信结束。因此本设计采用了socket的非阻塞模式。2.2 c/s结构C/S (Client/Server)结构,它是一种软件系统体系结构,也就是客户机/服务器结构。它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现。C/S结构的基本原则是“功能分布”原则,也就是将计算机应用任务分解成多个子任务,由多台计算机分工完成。客户端完成数据处理,数据表示以及用户接口功能;服务器端完成DBMS的核心功能。这种客户请求服务、服务器提供服务的处理方式是一种新型的计算机应用模式。现在已经普遍采用3层C/S结构,与传统的二层结构相比,三层C/S结构具有以下优点:首先,合理地划分三层结构的功能,从而使整个系统的逻辑结构更为清晰,提高系统和软件的可维护性和可扩展性;其次,可以更灵活地选用相应的平台和硬件系统,应用的各层可以并行开发或者各自选择最适合的开发语言。
3 文件传输工具的设计流程
3.1 文件传输工具的总体流程3.1.1 接收端的启动创建监听线程:(1)创建Socket,采用非阻塞模式。(2)通过bind()函数绑定IP地址和端口号。(3)通过listen()函数使其处于监听状态。3.1.2 发送端的连接(1)创建Socket。(2)通过connect()函数向接收端发送连接请求。3.2 文件传输工具的具体设计3.2.1 发送端(1)创建一个连接线程:1)创建socket()。2)根据用户界面输入的IP地址,调用connect()向接收端发出连接请求。3)连接建立后弹出对话框提示连接已建立。(2)选定文件后,创建一个对文件进行分包的线程:1)自定义一个合适的分包大小f_size。2)根据file.length得到文件的总大小,通过file.length/f_size求出该文件的分包数f_number。3)通过file.length%f_size求出该文件最后一包的大小flast_size。4)通过socket将文件基本信息(文件名f_name,文件大小f_size)和文件分包信息(分包大小f_size,分包数f_number,最后一包大小flast_size)发送给接收端。(3)创建一个发送文件数据的线程: sendThread() {WaitForMultipleEvents(); recv(); //接收分包信息 fseek(); //通过该函数将指针定位包信息所指的位置 send(); //发送分包
- 软件下载与安装、电脑疑难问题解决、office软件处理 + 关注
-
实名认证服务提供商
专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!
文档评论(0)