网路编程-局域网文件传输系统报告
- 格式:doc
- 大小:199.00 KB
- 文档页数:15
《计算机网络系统实践》报告设计题目:网络文件传输学生姓名:专业班级:计算机科学与技术2016 年 1 月一、设计要求1. 实现单线程文件传输功能;2. 在以上基础上,掌握多线程技术,在文件网络传输时,可选择单线程或多线程;3. 加入异常控制依据,增强程序的鲁棒性(Robust);4. 了解如何提高套接字传输的速率,以及如何加强传输的稳定性。
二、开发环境与工具Eclips+java三、设计原理1.文件共享传输方式原理:主要采用TCPIP协议访问资源,一般是利用名字解析NETBIOS,dns,wins获得对方的IP地址,获取对方共享资源列表,当点击共享资源时候,客户机对服务器端点发出建立会话请求,这发生在传输层。
为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的标准过程是这样的:第一步,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。
会话连接建立后,对方检查共享资源的设置,通过注册表中的共享级别。
2.客户端:通过ss.socket()这个方法获取服务器的socket对象,并同过BufferReader来获取通道中的字节流中的内容3.服务器:将要发送的文件事先封装到通道内,并通过BufferWriter写入通道中四、系统功能描述及软件模块划分网络文件传输所实现的主要功能:网络文件传输主要由两个方面组成:1.客户端 2.服务器1.客户端:接受服务器发来的文件2.服务器:发送要发送的文件五、设计步骤1.服务器端的设计:①创建服务器对象ServerSocket ss = new ServerSocket (11111);②循环等待客户端的连接,若有客户端访问,就单独为它创建一个线程While(true){Socket s = ss.accept();New thread(new UserThread(s).start());}③封装字节流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));④给出反馈bwServer.write(“文件上传成功”);⑤释放资源bw.close();2.客户端的设计①创建客户端对象Sockert s = new Socket();②封装文件BufferedWriter bw = new BUfferWriter(newOutputStreamWriter(s.getOutputStream()));③从通道中接受并反馈String client = brClient.readLine();System.out.println(client);④释放资源s.colse();六、关键问题及其解决方法1.怎样实现多线程的问题:While(true){Socket s = ss.accept();New thread(new UserThread(s).start());}2.怎样让// 封装通道内的流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));// 封装文本文件// BufferedWriter bw = new BufferedWriter(new// FileWriter("Copy.java"));// 为了防止名称冲突String newName = System.currentTimeMillis() + ".txt";BufferedWriter bw = new BufferedWriter(new FileWriter(newName));String line = null;while ((line = br.readLine()) != null) { // 阻塞bw.write(line);bw.newLine();bw.flush();}客户端与服务器端运用TCP协议进行连接七、设计结果1.功能:实现客户端与服务器之间进行文件的传输2.课后思考题①套接字有基于阻塞和非阻塞的工作方式,试问你编写的程序是基于阻塞还是非阻塞的?各有什么优缺点?我编写的程序是基于阻塞的。
网络编程文件传输实验报告CKBOOD was revised in the early morning of December 17, 2020.基于TCP一、1、2、sockets 二、本程序是基于TCP/IP协议栈的网络编程,使用C语言,利用操作系统提供的套接字网络编程接口进行编写TCP协议是其中重要的传输协议,为应用层提供可靠的端到端的流传输服务.其中套接字取值sock_stream即为TCP的流传输服务Windows socket包含了人们所熟悉的Berkeley Socket风格的函数库,也包含了一组针对windows的扩展库函数,以使程序员能充分的利用windows驱动消息机制进行编程。
Windows Sockets的规范本意在于提供给应用开发者一套简单的API,并让个网络应用软件开发商遵守该协议。
此外在一个特定的版本windows基础上,Windows socket也定义了一个二进制借口(ABI),从此来保证Windowssocket API应用程序能够在任何符合Windows socket协议的实现上工作。
三、设计概述1、创建套接字服务进程和客户进程在实现通信前必须创建各自的套接字,然后才能用相应的套接字进行发送接收操作,服务进程总是先于客户端进程启动,服务器端进程和客户端进程创建套接字。
Socket()函数实现代码如下:SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);....\n");....\n");//得到主机开始传送消息recv(clientSocket,receiveBuf,101,0);printf("%s\n",receiveBuf);if(strcmp(receiveBuf,"开始传送")==0){//传送文件长度char sendBuf[20];ltoa(length,sendBuf,10);send(clientSocket,sendBuf,21,0);fseek(fp,0L,SEEK_SET);//传送文件long int y=0;double cent;char trans[SIZE];while(!feof(fp)){fread(trans,1,SIZE,fp);y=y+SIZE;if(y<length){cent=(double)y*(double)length;printf("已发送:%%\n",cent); send(clientSocket,trans,SIZE+1,0); } else{ send(clientSocket,trans,length+SIZE-y+1,0);closesocket(clientSocket); WSACleanup(); } }fclose(fp);}printf("文件发送完毕\n");system("pause");}四、实验结果及分析:客户端运行结果服务器端运行结果五、心得体会:网络编程的实验课虽然只有八次,但是我们充分了解了各种网络编程和winsock控件的知识,了解了TCP/IP协议的相关知识以及其中两个重要协议TCP UDP的特点与差异,进一步学习了文件传输等知识,创建套接字监听传输关闭等过程,直到最后写出C/S模式的文件传输程序感觉我们巩固了教材的内容实践的能力也得到了提高不足之处就是自己粗心大意,在写代码时候参数注解等经常注明的不够好,希望以后能养成良好的编程习惯。
局域⽹⽂件传输实验报告局域⽹⽂件传输实验报告实验名称:编写局域⽹内进⾏⽂件传输的⼩⼯具实验⽬的:通过编写局域⽹内⽂件传输的⼯具,熟悉基于UDP的Socket编程,熟悉Winsock的相关内容。
对套接字编程有⼀定的理解和应⽤。
实验内容:本⼩组最终结果实现的实验内容:完成基本任务要求:输⼊对⽅IP 地址,对⽅如果存在,可以给对⽅发送⽂件。
完成扩展任务要求:1.⼯具具有图形交互界⾯;2.局域⽹内使⽤该⼯具的两台主机可以互相进⾏⽂字通信;3.⾃动按照⼀定频率扫描局域⽹内其他开启了该⼯具的主机,并在界⾯上⽤列表显⽰出来;4.传输⽂件和⽂字内容时,直接选择界⾯上已经显⽰出来的存活主机,不需要⼿动输⼊IP 地址。
实验准备说明:操作系统:Windows XP开发语⾔:C++,MFC开发平台:Microsoft Visual C++ 6.0由于开发图形界⾯时需要⽤到MFC,因此对缺乏MFC编译运⾏环境的VC6可能需要加载相应的动态链接库DLL⽂件。
加载⽅法:将DLL⽂件置放于系统链接库路径。
即:C:\WINDOWS\system32实验设计与开发:程序设计思路:程序所采⽤基于TCP/IP协议的Winsock编程原理,编程模型采⽤客户机/服务器(Client/Server)⽅式,为了⽅便使⽤,设计将客户机和服务器合⽽为⼀。
在通信的时候主要可以分为两个部分,⼀个部分是⽤于传送控制信息,例如发送⽂件的请求,⽂件的名称、⼤⼩等,由于这⽅⾯的数据量⽐较⼩,为了⽅便起见采⽤了MFC所提供的CSocket类的串⾏化技术来实现;⽽另⼀个部分就是⽂件的传输部分,对于⽂件的传输,由于数据量相对来说⽐较⼤,所以分别写了两个线程,⼀个⽤于发送,⼀个⽤于接收。
在添加附加功能聊天时,将聊天相关内容作为⼩⽂件传输,并将其显⽰在相应的控件中。
这两个部分在具体实现的时候分别建⽴有⾃⼰的套接字(Socket)。
程序代码内容⼤体分为图形界⾯和后台交互两个模块,在最开始设计开发时原本准备以此作为分⼯,但实际图形界⾯代码较少,⽽且主要的复杂点在于事件响应和句柄绑定,⽐较容易解决,总体⼯作量较少,因此图形界⾯后来是共同讨论开发,设计完成后根据具体的控件响应分⼯相关联的后台交互代码开发。
一、实验目的1. 理解网络编程的基本原理和概念。
2. 掌握TCP/IP协议的基本工作原理。
3. 学会使用Socket编程实现网络通信。
4. 增强实际操作能力,提高网络编程水平。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm4. 网络环境:校园局域网三、实验内容本次实验主要实现一个基于TCP协议的简单网络通信程序,包括客户端和服务器端。
1. 服务器端服务器端负责监听客户端的连接请求,接收客户端发送的数据,并回显给客户端。
```pythonimport socket# 创建socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 12345# 绑定端口server_socket.bind((host, port))# 设置最大连接数,超过后排队server_socket.listen(5)print("等待客户端连接...")while True:# 建立客户端连接client_socket, addr = server_socket.accept()print("连接地址:", addr)while True:# 接收客户端数据data = client_socket.recv(1024)if not data:break# 发送数据回客户端client_socket.send(data)# 关闭连接client_socket.close()```2. 客户端客户端负责向服务器端发送数据,并接收服务器端回显的数据。
```pythonimport socket# 创建socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 12345# 连接服务器client_socket.connect((host, port))# 发送数据client_socket.send("Hello, Server!")# 接收数据data = client_socket.recv(1024)print("从服务器接收到的数据:", data)# 关闭连接client_socket.close()```四、实验步骤1. 编写服务器端代码,并运行程序。
计算机⽹络实验报告⽂件共享,实验报告局域⽹的⽂件共享、互联⽹的使⽤.doc...学⽣姓名: 学 号: 专业班级:实验类型:■验证□ 综合 □ 设计 □ 创新 实验⽇期: 实验成绩:(以下主要内容由学⽣完成)⼀、实验项⽬名称局域⽹的⽂件共享、互联⽹的使⽤⼆、实验⽬的了解局域⽹的特点,掌握局域⽹⽂件共享的操作步骤。
了解互联⽹知识,掌握⽹上浏览和收发电⼦邮件的操作。
三、实验基本原理四、主要仪器设备及耗材计算机五、实验步骤1访问计算机的⽹络属性,了解计算机的⽹络设备= 1 \* GB2 ⑴右键单击桌⾯“⽹上邻居”图标,在弹出属性。
= 2 \* GB2 ⑵在打开“⽹络和拨号连接”窗⼝。
右键单击“本地连接”图标,在弹出的菜单中单击属性。
= 3 \* GB2 ⑶在⽹络属性的组件列表中,查看是否有“Microsoft⽹络的⽂件和打印机共享”组件。
后⾯局域⽹⽂件共享实验必须要这个组件,如果没有,请询问知道教师。
= 4 \* GB2 ⑷⽹络的组件列表中,单击“Internet协议(TCP/IP),再单击“属性”按钮。
= 5 \* GB2 ⑸Internet协议属性窗⼝,查找以下各项,并作记录,然后关闭上⾯的窗⼝。
本机IP地址、⼦⽹掩码、⽹关IP地址、DNS服务器IP地址= 6 \* GB2 ⑹单击任务栏“开始/运⾏”,在弹开的窗⼝中输⼊,ping [本机IP地址] –t,单击确定,注意观察连接信息提⽰,关闭窗⼝。
如果出现不能连接错误信息,请询问知道教师。
= 7 \* GB2 ⑺单击任务栏“开始/运⾏”,在弹出的窗⼝输⼊,ping[DNS服务器IP地址]-t,单击确定,注意观察连接信息提⽰。
关闭窗⼝。
如果出现不能连接错误信息,请询问指导教师。
= 8 \* GB2 ⑻如果上⾯(6)、(7)⼆步骤正常,表明本机互联⽹连接正常。
单击任务栏“开始/运⾏”,在弹出的窗⼝中输⼊,ping –t,单击确定,注意观察连接信息提⽰,记录下QQ⽹站的IP地址,关闭窗⼝。
综合课程设计报告基于TCP协议的文件传输系统学生姓名:指导教师:所在系:所学专业:年级:2011年6月目录摘要 (2)1、实验的相关知识 (3)1.1、通信的模式 (3)1.1.1、传输的可靠性 (3)1.2.1、TCP/IP的网络体系结构 (3)1.2.2、TCP/IP网络协议 (4)1.2.3、TCP——传输控制协议 (4)2、winsock控件 (5)2.1.1、winsock的重要属性、方法和事件 (5)2.1.2、winsock控件通信的工作原理 (7)3、程序设计与实现 (8)3.1、程序设计 (8)3.1.1、总体设计 (8)3.1.2、模块设计 (9)3.2、程序实现 (10)3.2.1、工作原理 (10)3.2.2、服务器端主程序 (11)3.2.3、客户端主程序 (14)4、实验总结 (17)参考文献...............................................................17. 成绩评定. (18)基于TCP协议的文件传输系统摘要随着网络的普及,网络编程显得尤其重要。
本实验使用Winsock控件实现两台计算机间的文件传输,描述了Winsock控件的使用方法及有关文件传输的算法。
随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。
本文讨论的Winsock控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用Winsock API,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。
同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传输后已经传输的文件不丢失,等到再传时,能继续接着传送。
关键词:TCP/IP协议,Winsock控件,网络编程,文件传输,断点续传。
一、实验目的1. 理解网络编程的基本原理和概念。
2. 掌握TCP/IP协议栈的基本工作原理。
3. 学习使用Socket编程实现网络通信。
4. 熟悉网络编程中的多线程编程技术。
5. 提高实际编程能力和问题解决能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 20194. 网络编程库:Winsock三、实验内容1. 网络编程基础2. Socket编程3. 多线程编程4. 客户端-服务器模式四、实验步骤1. 网络编程基础(1)了解网络编程的基本概念,如IP地址、端口号、协议等。
(2)学习TCP/IP协议栈的工作原理,包括OSI七层模型和TCP/IP四层模型。
2. Socket编程(1)学习Socket编程的基本原理,包括Socket创建、连接、发送、接收和关闭等操作。
(2)编写一个简单的TCP客户端程序,实现与服务器端的通信。
(3)编写一个简单的TCP服务器程序,接收客户端的连接请求,并实现数据交互。
3. 多线程编程(1)学习多线程编程的基本原理,了解线程、进程、并发和同步等概念。
(2)在客户端程序中添加多线程,实现同时与多个服务器进行通信。
(3)在服务器程序中添加多线程,实现同时处理多个客户端的连接请求。
4. 客户端-服务器模式(1)实现一个简单的文件传输客户端,实现文件的发送和接收。
(2)实现一个简单的文件传输服务器,接收客户端的文件传输请求,并完成文件传输。
五、实验结果与分析1. 网络编程基础通过学习网络编程基础,我们了解了网络编程的基本概念和TCP/IP协议栈的工作原理,为后续的Socket编程打下了基础。
2. Socket编程(1)通过编写TCP客户端程序,实现了与服务器端的通信,验证了Socket编程的基本原理。
(2)通过编写TCP服务器程序,接收客户端的连接请求,并实现了数据交互,进一步巩固了Socket编程的知识。
3. 多线程编程通过在客户端和服务器程序中添加多线程,实现了同时与多个服务器进行通信和同时处理多个客户端的连接请求,提高了程序的并发处理能力。
综合课程设计报告基于 TCP协议的文件传输系统学生姓名:指导教师:所在系:所学专业:年级:2011年6月目录摘要⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2 1、的相关知 (3)1.1 、通信的模式 (3)1.1.1 、的可靠性 (3)1.2.1 、 TCP/IP 的网体系构 (3)1.2.2 、 TCP/IP 网 (4)1.2 . 3、 TCP——控制 (4)2、winsock 控件 (5)2.1.1 、 winsock 的重要属性、方法和事件 (5)2.1.2 、 winsock 控件通信的工作原理 (7)3、程序与 (8)3.1 、程序 (8)3.1.1 、体 (8)3.1.2 、模 (9)3.2 、程序 (10)3.2.1 、工作原理 (10)3.2.2 、服器端主程序 (11)3.2.3 、客端主程序 (14)4、 (17)参考文献...........................................................................................................17.成定 (18)基于TCP协议的文件传输系统摘要随着网络的普及,网络编程显得尤其重要。
本实验使用Winsock 控件实现两台计算机间的文件传输,描述了Winsock 控件的使用方法及有关文件传输的算法。
随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP 协议最为流行。
本文讨论的Winsock 控件,提供了访问TCP/IP 网络的捷径,使用它可以不必了解TCP/IP 的细节和调用Winsock API ,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。
同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传输后已经传输的文件不丢失,等到再传时,能继续接着传送。
《网络编程》课程设计报告院系: 计算科学与工程学院班级:学号:姓名:XXX指导教师:2010年7月13日—2009年7月17日目录一、实验名称:文件传输程序 (3)二、实验要求 (3)三、总体规划 (3)1、网络传输协议的选择。
(3)2、TCP协议在VC++中的实现 (3)a、采用WinSocket API函数。
(3)b、采用VC++中提供的MFC类,CAsyncSocket或CSocket (4)2、传输数据的缓冲问题。
(4)3、Socket的文件化管理。
(4)4、数据的串行化问题。
(5)5、接收数据判断是否传输完毕的方法。
(5)四、运行环境。
(6)五、部分程序源代码。
(6)1、建立服务器侦听套接字的类CListenSocket的定义与实现。
(6)2、建立数据传输套接字的类CTransSocket的定义与实现 (6)3、用于数据串行化的类CSave的定义与实现: (7)4、主对话框CTcpDlg类的定义与实现: (8)六、实验结果。
(18)1、建立服务器 (18)2、客户端建立连接 (19)3、发送文件 (20)a、客户端发送 (20)b、服务器端接收 (21)4、成功发送 (21)5、在E:盘中查找接收到的文件 (22)七、实验心得体会。
(23)八、参考文献。
(23)一、实验名称:文件传输程序二、实验要求1、设计一个应用程序,该应用程序能够实现网络中两台计算机之间传输文件。
2、一个程序既能够建立服务器又能够以终端的形式连接服务器。
3、终端或者服务器既能够发送文件又能够接收文件。
4、传送文件类型应为任何类型,文件大小为任意。
三、总体规划1、网络传输协议的选择。
在TCP/IP协议栈中,有两个高级协议是我们网络应用程序编写者应该了解的,它们"传输控制协议"(Transmission Control Protocol,简称TCP)和"用户数据报协议"(User Datagrm Protocol,简称UDP)。
一、实验目的1. 掌握网络编程的基本概念和原理。
2. 熟悉常用的网络编程工具和技术。
3. 能够编写简单的网络通信程序。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 20194. 网络编程库:Winsock三、实验内容本次实验主要涉及以下几个方面的内容:1. Winsock编程基础2. TCP客户端/服务器通信3. UDP客户端/服务器通信4. 简单文件传输四、实验步骤1. Winsock编程基础(1)创建Winsock环境在Visual Studio中,使用Winsock 2库进行编程。
首先,在项目属性中添加Winsock 2库。
(2)初始化Winsock使用WSAStartup函数初始化Winsock环境。
(3)创建套接字使用socket函数创建套接字。
(4)绑定套接字使用bind函数绑定套接字。
(5)连接套接字使用connect函数连接套接字。
(6)发送和接收数据使用send和recv函数发送和接收数据。
(7)关闭套接字使用closesocket函数关闭套接字。
(8)清理Winsock环境使用WSACleanup函数清理Winsock环境。
2. TCP客户端/服务器通信(1)创建TCP服务器端创建TCP服务器端程序,监听客户端的连接请求。
(2)创建TCP客户端创建TCP客户端程序,连接到服务器端。
(3)数据交换在客户端和服务器端之间进行数据交换。
3. UDP客户端/服务器通信(1)创建UDP服务器端创建UDP服务器端程序,接收客户端的数据。
(2)创建UDP客户端创建UDP客户端程序,向服务器端发送数据。
(3)数据交换在客户端和服务器端之间进行数据交换。
4. 简单文件传输(1)创建文件传输服务器端创建文件传输服务器端程序,监听客户端的文件传输请求。
(2)创建文件传输客户端创建文件传输客户端程序,向服务器端发送文件传输请求。
(3)文件传输在客户端和服务器端之间进行文件传输。
河北科技大学课程设计报告学生姓名:学号:专业班级:网络081课程名称:网络编程技术学年学期:2 010—2 011 学年第 2 学期指导教师:2 0 11年6月课程设计成绩评定表目录1.设计题目 (1)2.设计目的 (1)3.设计要求 (1)4.程序设计过程 (1)4.1设计分析 (1)4.2程序流程图 (2)5.程序源代码 (2)5.1 获取在线用户名及IP (2)5.2发送文件及接收文件 (4)5.3刷新列表 (6)5.4输及退出 (6)6.运行调试 (7)6.1文件传输运行主界面窗口 (7)6.2发送文件及接收文件界面 (8)6.3中止文件传输界面 (10)6.4刷新列表界面 (11)7.总结 (11)7.1主要问题 (11)7.2收获心得..................................... (12)1.设计题目局域网文件传输系统2.设计目的1.基本掌握设计课题的基本步骤和方法;2.掌握可视化开发具体的使用;3.根据课题的要求进行上机调试;4.掌握面相对象编程的基本思路和方法;5.掌握socket的建立、监听、连接和数据收发编程实现。
3.设计要求1.实现局域网内多台计算机间的文件传送,达到共享的目的;2.程序能够动态的监听在线用户,并自动获得机器名及相应IP;3.能够随时终止文件的传输;4.双方可知道对方的状态,以及文件的接受率,传输率及文件大小的情况,可随时中止和退出接受。
4.程序设计过程4.1设计分析本系统的开发采用基于winsocket的广播发送模式,在局域网内进行全网广播,以得到在线用户的主机名和相应的IP。
根据FTP协议的特点采用TCP链路进行传输控制,UDP组播进行数据传输的方式,实现文件的传输。
设计为了方便,可以设计出FMV类图形用户界面,并添加相应的相应按钮。
4.2程序流程图图 1 程序流程图5.程序源代码5.1 获取在线用户名及IPvoid CFiletransDlg::BroadCastSend(){//发请求返回在线确认消息,以获得在线用户信息。
sockaddr_in addrTo;addrTo.sin_addr.S_un.S_addr=htonl(INADDR_BROADCAST);addrTo.sin_family=AF_INET;addrTo.sin_port=htons(RECVPORT);//获取主机名char phost[200];char temp[400];memset(phost,0,200);memset(temp,0,400);if( 0==gethostname(phost,200));elsestrcpy(phost,"Yang");strcpy(temp,"\t\t\t\t");//指定报头为请求返回在线确认消息。
strcat(temp,phost);//向本子网内请求返回在线确认消息。
interr=sendto(m_sockSend,temp,strlen(temp)+1,0,(sockaddr*)&addrTo,sizeof(socka ddr));if(SOCKET_ERROR==err){//MessageBox("广播发送数据失败。
");return;}err=sendto(m_sockSend,temp,strlen(temp)+1,0,(sockaddr*)&addrTo,sizeof(s ockaddr));if(SOCKET_ERROR==err){//MessageBox("广播发送数据失败。
");return;}}5.2发送文件及接收文件//发送文件void CFiletransDlg::OnSendFile(){ // TODO: Add your control notification handler code here CString ip;if(!GetIPAddr(ip)){ return ; }int modal,nCount; //modal表示返回对话框的结果CString fileName; //文件的名字CFileDialog fdlg(true); //打开文件对话框modal=fdlg.DoModal();if(IDCANCEL==modal){ return; //用户取消发送。
}SENDFILEPARAM* p=new SENDFILEPARAM;fileName=fdlg.GetFileName();p->pathName=fdlg.GetPathName();nCount=fileName.GetLength();memset(p->fileName,0,NAMELENGTH);for(int i=0;i<nCount;i++){ p->fileName[i]=fileName.GetAt(i); }p->pCLAN=this;p->ip=ip;::AfxBeginThread(SendFileSingle,(LPVOID)p);return;}//收文件UINT SaveFileSingle(LPVOID param){ SA VEFILEPARAM sp;sp.pCLAN=((SA VEFILEPARAM*)param)->pCLAN;sp.sock=((SA VEFILEPARAM*)param)->sock;CSocket sock;sock.Attach(sp.sock);DWORD Length;char fileName[NAMELENGTH];CString savePathName;int modal,err;memset(fileName,0,NAMELENGTH);err=sock.Receive(&Length,sizeof(DWORD));//接收文件长度if(0==err){ AfxMessageBox("连接被关闭了。
");sock.Close();//重置事件对象为有信号状态,准备下次接收。
if(!SetEvent(g_hEventRecv)){return 0;}if(0==finish){ CString strFinis;if(step<Length){strFinis.Format("发送方停止传输\r\n\r\n%s",fileName);AfxMessageBox(strFinis);}else{CString strFinish;strFinish.Format("已成功接收文件\r\n\r\n%s",fileName);AfxMessageBox(strFinish);}}else { if(!m_stop){ m_stop=true;CString strFinis;strFinis.Format("接受方停止接受\r\n\r\n%s",fileName);AfxMessageBox(strFinis);}}return 0;}5.3刷新列表void CFiletransDlg::OnFlushList(){ int nListItemCount=this->m_IPlist.GetItemCount();for(int i=0;i<nListItemCount;i++){ this->m_IPlist.DeleteItem(i);}BroadCastSend();}5.4输及退出//中止文件传输void CFiletransDlg::OnStoptrans(){ if(MessageBox(_T("真的要停止文件传输吗?"), _T("警告"), MB_ICONEXCLAMATION|MB_YESNO) == IDYES){m_stop = false;return ;}}//退出void CFiletransDlg::OnClose(){ BroadCastExit(); //通知其他主机我下线了。
if(INV ALID_SOCKET!=m_sockRecv)closesocket(m_sockRecv);if(INV ALID_SOCKET!=m_sockSend)closesocket(m_sockSend);ResetEvent(g_hEventRecv);ResetEvent(g_hEventSend);DeleteCriticalSection(&g_criticalSend);DeleteCriticalSection(&g_criticalRecv);CDialog::OnCancel();CDialog::OnClose();}6.运行调试6.1文件传输运行主界面窗口图2 文件传输主界面6.2发送文件及接收文件界面图 3 发送文件界面图 4 接收文件窗口图 5 文件传输过程显示图 6 接收文件成功界面6.3中止文件传输界面图 7 文件中止传输确定图8中止传输后返回错误界面6.4刷新列表界面图 9 刷新界面对比7.总结7.1主要问题1.如何设计选择多个用户接收同一个文件;2.如何一次选择传输多个文件;3.怎样可以传输整个未打包文件夹7.2收获心得在一起讨论着完成这个过程中,虽然自己不是知道很多,虽然自己没能够编写多少代码,不过在这个过程中确实学到了很多。
在要添加进度条去显示传输百分多少功能时,通过上网查,看书,也找到了相应的函数并添加成功了。
更换了原来就有的图标,虽然简单,却也知道了方法。
也知道了要用全广播进行局域网广播以获取在线主机名及主机IP。
自己动手确实能够学到很多东西,而且会学的很快。