局域网文件传输及消息发送
nc 局域网聊天+文件传输(netcat)

nc 局域网聊天+文件传输(netcat)nc的全程是netcat,这个工具非常好用。
有时候我们需要在局域网内传送一些文本消息或者文件的时候,通常的做法是安装一些局域网通讯软件,然后来做。
其实不必要这样,使用nc这个小工具就很好了。
nc的一些参数具体的参数,可以通过nc -help来获取。
(注意此处只有一个-)下面表格中的内容是用google翻译后修改来的,不是很好看,请原谅。
最常用的几个参数就是-l,-u,-p这几个参数。
参数说明-4使用IPv4-6使用IPv6-b允许广播-C发送CRLF作为行结束-D启用套接字调试选项-d从标准输入分离-h查看帮助信息-I length TCP接收缓冲区长度-i secs发送间隔/端口扫描的延时-j使用巨型帧-k保持套接字打开多个连接-l监听模式,绑定端口,等待连接参数说明-n禁止名称/端口的解析-O length TCP发送缓冲区长度-P proxyuser用户名代理验证-p port指定用于远程连接的本地端口-q secs quit after EOF on stdin and delay of secs-r随机化远程端口-S启用TCP MD5签名选项-s addr本地源地址-T toskeyword设置IP类型-t应答TELNET协商-U使用UNIX域套接字-u UDP模式-V rtable指定备用路由表-v详细-w secs连接超时时间和最后网络读取-X proto 代理协议: “4”, “5” (SOCKS) 或“connect”-xaddr[:port]指定代理服务器地址端口-Z DCCP模式-z Zero-I/O 模式 [用于扫描] nc 进行局域网内聊天因为是局域网,所有这里使用UDP协议还是TCP协议是没多大关系的。
这是很简单的C/S模式,把其中一台机器当做服务器,另一台当做客户端就是了。
对于服务器,使用这个命令nc -l 9999来监听9999端口,默认使用的是TCP协议,可以加-u参数来使用UDP协议。
局域网中的网络协议有哪些

局域网中的网络协议有哪些在局域网中,网络协议扮演着非常重要的角色,它们定义了数据传输的规则和方式,保证了网络通信的顺畅进行。
下面将介绍一些常见的局域网中的网络协议。
1. TCP/IP协议TCP/IP协议是互联网常用的协议,在局域网中也得到广泛应用。
TCP(传输控制协议)负责数据的可靠传输,确保数据的完整性和有序性;而IP(网际协议)则负责将数据进行分组和寻址,实现数据的路由。
2. DHCP协议动态主机配置协议(DHCP)是一种自动分配IP地址的协议。
在局域网中,DHCP服务器可以自动为连接到网络的设备分配IP地址、子网掩码、默认网关和DNS服务器等网络参数,简化了网络管理的难度。
3. DNS协议域名系统(DNS)是一个将域名和IP地址相互映射的分布式数据库系统。
在局域网中,DNS协议负责将用户输入的域名转换为对应的IP地址,使得用户可以通过域名访问网络资源,而无需记住复杂的IP地址。
4. UDP协议用户数据报协议(UDP)是一种无连接的传输协议。
与TCP不同,UDP不提供数据的可靠传输和有序性,但传输效率更高,适用于局域网中交互性要求较高的应用,例如视频播放、实时通信等。
5. ICMP协议互联网控制消息协议(ICMP)是用于在IP网络中传递控制消息的协议。
在局域网中,ICMP协议常用于网络故障排查和诊断,例如ping 命令就是基于ICMP协议来测试两台设备之间的连通性。
6. ARP协议地址解析协议(ARP)用于将IP地址转换为MAC地址,以实现不同设备之间的通信。
在局域网中,当一个设备需要与另一个设备通信时,会发送ARP请求来获取目标设备的MAC地址,然后才能进行数据传输。
7. HTTP协议超文本传输协议(HTTP)是一种用于传输超媒体文档(例如HTML)的应用层协议。
在局域网中,HTTP常用于浏览器与服务器之间的通信,实现网页的浏览和数据的传输。
8. FTP协议文件传输协议(FTP)用于在计算机之间进行文件的传输。
局域网组建如何实现数据共享与文件传输

局域网组建如何实现数据共享与文件传输随着互联网的普及,越来越多的机构和企业开始搭建局域网来实现内部资源的共享和文件传输。
局域网(Local Area Network,简称LAN)是指在某个特定区域内的计算机网络,它可以连接在同一建筑物或者相邻建筑物内的多台计算机。
局域网的组建旨在促进内部的信息流动和协作,提高工作效率。
本文将介绍局域网组建的基本原理以及如何通过局域网实现数据共享和文件传输。
一、局域网的组建原理局域网的组建基于以下几个关键要素:网络设备、网络拓扑和网络协议。
1. 网络设备为了搭建一个局域网,我们需要准备一些网络设备,比如交换机、路由器和网线等。
交换机是局域网的核心设备,它负责将网络中的各个节点连接在一起,形成一个整体。
路由器则可以连接不同的局域网,并实现不同局域网之间的数据传输。
2. 网络拓扑网络拓扑是指局域网中各个节点之间的物理连接方式,常见的网络拓扑结构有总线型、星型、环型和树型等。
在搭建局域网时,我们可以根据实际需求选择合适的网络拓扑结构。
3. 网络协议局域网中的数据传输需要依赖网络协议来进行管理和调度,常见的网络协议有TCP/IP协议、IPX协议和NetBEUI协议等。
TCP/IP协议是互联网中最常用的协议之一,它可以保证数据在局域网内的传输稳定和可靠。
二、数据共享局域网的一个重要目标就是实现内部资源的共享,包括文件、打印机、数据库等。
通过局域网的数据共享功能,用户可以方便地访问和共享这些资源。
1. 文件共享在局域网中,可以建立一个文件服务器,用于存储和管理各种文件。
每个用户可以通过自己的计算机访问文件服务器,并进行文件的上传、下载和编辑等操作。
这样一来,不同用户之间可以方便地共享文件,提高工作协作效率。
2. 打印机共享局域网还可以实现打印机的共享功能。
当一台计算机连接了打印机后,其他局域网内的计算机也可以通过网络访问这台打印机,从而实现打印任务的共享。
这样可以避免每台计算机都单独购买一台打印机的浪费,节省办公成本。
局域网即时聊天程序的设计与实现

局域网即时聊天程序的设计与实现随着互联网的普及,人们越来越频繁地使用即时通讯工具进行沟通和交流。
然而,对于一个机构或公司内部的局域网来说,使用公开的即时通讯工具可能存在信息泄漏和安全性风险。
因此,设计和实现一个局域网即时聊天程序就变得尤为重要。
首先,局域网聊天程序需要具备以下几个基本功能:1.用户注册与登录:每个用户需要注册一个账号,并使用该账号登录局域网聊天程序。
2.好友管理:用户可以添加好友,删除好友,查找好友等操作。
好友之间可以实时聊天。
3.群组功能:用户可以加入群组,并与群组内的其他成员进行聊天。
4.文件传输:用户可以发送文件给好友或群组成员。
5.聊天记录存储:聊天程序需要将用户的聊天记录存储在服务器上,方便用户随时查看。
接下来,我将介绍一个局域网即时聊天程序的设计和实现。
首先需要设计和实现一个服务器端,负责处理用户的注册、登录、好友管理等功能,同时负责接收和转发用户的聊天消息和文件传输请求。
服务器端可以使用一种常见的服务器端程序设计语言来实现,如Java、Python或C#等。
用户可以在自己的电脑或手机上安装局域网聊天程序的客户端。
客户端可以使用跨平台的框架来实现,如Electron、React Native等。
客户端需要提供用户注册、登录、好友管理、群组功能等界面和操作方式,并与服务器端进行通信。
3.网络通信协议设计局域网聊天程序需要定义一种网络通信协议,用于客户端与服务器端之间的通信。
通信协议可以使用XML、JSON等格式进行定义和传输。
协议需要明确定义消息的格式,包括消息的类型、发送者、接收者、内容等。
服务器端需要使用数据库来存储用户信息、好友关系、群组信息和聊天记录等数据。
可以使用关系型数据库如MySQL或PostgreSQL,也可以使用非关系型数据库如MongoDB或Redis。
局域网聊天程序需要考虑安全性问题,防止用户信息泄漏和非法入侵。
可以使用加密算法对用户密码进行加密存储和传输,同时使用防火墙、反病毒软件等工具保护服务器的安全。
电脑之间传文件最快的方法

电脑之间传输文件最快的方法取决于多种因素,如文件大小、网络速度、设备性能等。
以下是一些常用的快速文件传输方法:
1.局域网传输:如果两台电脑在同一局域网内,可以使用局域网传输方法,如通过局域网共享文件夹、使用局域网传输工具等。
局域网传输速度通常较快,受限于局域网的带宽。
2.直接连接:使用网络电缆、以太网线或USB数据线等直接连接两台电脑,然后通过网络共享或专用传输工具进行文件传输。
这种方法通常可以实现较高的传输速度。
3.使用传输工具:有许多第三方传输工具可以帮助实现快速文件传输,如微软的OneDrive、Google Drive、蓝牙传输工具、AirDrop等。
这些工具通常可以在局域网内或通过云存储实现快速传输。
4.使用快速数据线:如果使用USB数据线连接两台电脑,确保使用高速USB 3.0或更高版本的数据线,以获得更快的传输速度。
5.使用专用传输软件:一些专门的文件传输软件,如ShareIt、SendAnywhere、文件传输助手等,可以通过直接连接或局域网实现快速的文件传输。
6.压缩文件:在传输大文件时,可以将文件压缩成压缩包,减小文件大小,从而加快传输速度。
7.使用高速网络:如果两台电脑连接到高速网络,如千兆以太网或高速Wi-Fi,传输速度会更快。
电脑互传文件的方法-概述说明以及解释

电脑互传文件的方法-概述说明以及解释1.引言1.1 概述概述在数字化时代,电脑互传文件已经成为我们日常工作和生活中必不可少的一项功能。
无论是在工作场合中将文件传递给同事,还是在家庭中分享照片和视频,我们都需要快速、安全、方便的方法来传输电脑文件。
本文将介绍两种主要的电脑互传文件的方法。
首先,通过网络传输文件,我们可以利用电子邮件或云存储服务来方便地发送和接收文件。
其次,通过局域网传输文件,我们可以利用文件共享功能或局域网传输软件来在同一网络内传输文件。
通过详细介绍这两种方法的步骤和操作,我们将帮助读者了解如何使用这些方法来实现电脑互传文件的目的。
并且,我们还将总结这些方法的优缺点,并探讨未来电脑互传文件的发展方向。
在本文中,我们将提供简单易懂的指导,使读者能够轻松地掌握电脑互传文件的方法,并在工作和生活中更加高效地运用这些技巧。
无论你是初学者还是有一定经验的电脑用户,本文都将为你提供有益的信息和实用的技巧。
让我们一起来探索电脑互传文件的方法吧!1.2 文章结构文章结构部分的内容将包括对整篇长文的组织和安排进行说明。
在本文中,主要包括引言、正文和结论三个部分。
引言部分将对电脑互传文件的方法进行概述,介绍本文的结构和目的。
目的是为了帮助读者了解电脑互传文件的不同方法,并对这些方法进行优缺点分析。
正文部分将详细介绍两种主要的电脑互传文件的方法。
方法一是通过网络传输文件,主要包括使用电子邮件和使用云存储服务两种方式。
方法二是通过局域网传输文件,主要包括使用文件共享功能和使用局域网传输软件两种方式。
在每个子部分中,将详细介绍每种方法的具体操作步骤和使用注意事项。
对于方法一,将介绍如何通过电子邮件发送和接收文件,以及如何使用各种云存储服务进行文件传输。
对于方法二,将说明如何使用计算机的文件共享功能进行文件传输,以及使用特定的局域网传输软件进行文件传输的方法。
结论部分将对方法一和方法二进行总结,并分析它们的优缺点。
局域网内如何传输文件

局域网内如何传输文件在如今的数字化时代,我们常常需要在同一局域网内的设备之间传输文件。
无论是在办公室共享工作文档,还是在家中不同电脑之间传递照片和视频,高效、便捷的文件传输方法都能大大提高我们的工作效率和生活便利性。
下面就来详细介绍一下局域网内传输文件的几种常见方法。
首先,我们来谈谈使用共享文件夹的方式。
这是一种较为传统且简单直接的方法。
在要共享文件的电脑上,找到需要共享的文件夹,右键点击选择“属性”,然后在“共享”选项卡中设置共享权限。
可以选择允许特定用户访问,或者允许所有网络用户读取或读写。
设置好共享后,其他在局域网内的电脑就可以通过网络邻居或者资源管理器,找到这台共享电脑,并访问共享文件夹来获取文件。
需要注意的是,为了保证安全性,建议设置合适的访问权限,并定期检查共享设置。
接下来是使用飞秋(FeiQ)这类局域网通讯工具。
飞秋类似于QQ,但它专门针对局域网环境设计。
安装飞秋后,它会自动搜索局域网内的其他用户。
要传输文件,只需双击对方的用户名,打开聊天窗口,然后将文件拖放到聊天窗口中即可发送。
飞秋还支持群发文件,对于需要同时向多个用户传输相同文件的情况非常方便。
而且,飞秋不仅可以传输文件,还能进行文字聊天、语音通话等,功能相当丰富。
另外,Windows 系统自带的“文件和打印机共享”功能也十分实用。
在控制面板中找到“网络和共享中心”,然后点击“更改高级共享设置”,启用文件和打印机共享,并根据需要设置相关的权限和选项。
通过这种方式,其他局域网用户就可以在自己的电脑上直接访问共享的文件和打印机。
如果您需要传输较大的文件,或者希望实现更高效的传输速度,那么使用 FTP 服务器可能是一个不错的选择。
在局域网内的一台电脑上搭建 FTP 服务器,其他电脑就可以通过 FTP 客户端软件连接到服务器来上传和下载文件。
搭建 FTP 服务器的方法有很多,可以使用Windows 系统自带的IIS 服务,也可以使用第三方的FTP 服务器软件,如 FileZilla Server 等。
电脑之间互传文件最快的方法

电脑之间互传文件最快的方法
1. 使用局域网(LAN):如果两台电脑连接在同一个局域网内,可以通过共享文件夹或使用文件共享服务(如 Windows 文件共享或 Samba)来传输文件。
这种方法速度通常很快,因为文件直接在局域网中传输,不需要通过互联网。
2. 使用外部存储设备:将文件存储在外部硬盘、USB 闪存驱动器或其他可移动存储设备中,然后将其插入目标电脑进行传输。
这种方法适用于小规模文件传输,速度相对较快。
3. 使用网络传输工具:有许多专门用于文件传输的网络工具,如镭速传输、Dropbox、Google Drive 等。
这些工具可以通过互联网在两台电脑之间传输文件,并且通常提供了快速传输的选项。
4. 使用局域网传输工具:对于局域网内的文件传输,还可以使用专门的局域网传输工具,如飞鸽传书、AirDrop(仅适用于 Mac 电脑)等。
这些工具可以利用局域网的高速连接进行快速文件传输。
5. 直接连接两台电脑:如果两台电脑都有以太网接口或其他网络接口,可以使用交叉网线或直接通过网络线连接两台电脑。
这种方法可以实现快速的文件传输,但需要一些网络设置。
需要注意的是,文件传输速度还受到许多因素的影响,如网络带宽、文件大小、电脑性能等。
在选择文件传输方法时,应根据实际情况和需求进行选择,并确保两台电脑之间的网络连接稳定和快速。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《网络程序设计》课程设计报告书题目:局域网文件传输与消息通信专业:网络工程学号:20091423学生姓名:史政法指导教师:魏宁完成日期:2012年06月06日一、题目及要求Window程序设计的基本要求:1.熟练掌握网络的基本概念和原理;2.熟练掌握网络编程接口Socket概念及编程原理;3.掌握基于TCP/IP的Internet编程技术;4.掌握各种软件开发工具的使用过程及方法。
本实例程序的技术要点是:●如何从CasyncSocket类派生出自己的WinSock类。
●理解WinSock类与应用程序框架的关系。
●重点学习流式套接字对象的使用。
●处理网络事件的方法。
二、系统概要设计1、CSocket类的介绍在MFC中,为了提供面向对象的编程方式而封装了两个WinSock类:一个是CAsyncSocket类,另一个是CSocket类。
他们的不同点在于前者使用的是非阻塞模式操作,而后者可以支持阻塞模式的I/O操作。
CSocket类是从CAsyncSocket类中继承来的,他为程序员提供了更高级的抽象性。
由于CSocket类和CArchive类一起使用,并且管理了通讯的大多数操作,从而使程序员从网络编程的底层细节中解脱了出来,不必使用CAsyncSocket 的一些成员函数和一些Windows Socket API函数来处理通信问题。
共同使用CSocket和CArchive类对象进行编程是最简单的WinSock编程模式。
下面是使用CSocket类进行网络通信的过程(1)构造CSocket类对象(2)用CSocket类对象的Create函数创建Windows Socket,Create()函数会调用Bind()函数将此函数绑定的指定的地址和端口。
(3)Socket创建完毕后,Listen()函数在服务器端进行监听客户的连接请求。
(4)在这一步,服务器端调用Accept()函数对客户端发来的请求进行接受和处理,而客户端则调用Connect()函数向服务器发出连接请求。
(5)在客户端和服务器端的数据传输完成后,应该分别在两边销毁创建的CSocket 对象。
2、编程思路和工程实现用MFC AppWizard新建一个给予对话框的工程,在第三步中添加Windows SocketS的支持,建立的程序界面如右图:图1—-程序主对话框中的控件属性控件类型控件IDCaption 静态文本 static text IDC_STATIC本机的ip : 静态文本 static text IDC_STATIC_SERVPOR T 要连接的ip : 静态文本 static text IDC_STATIC_MSG 消 息 IP 地址 Internet add IDC_MYIP IP 地址 Internet add IDC_YOURIP 编辑框 edit box IDC_EDIT_MSG 命令按钮 button IDC_BUTTONCONNECT 启动 命令按钮 button IDC_BUTTON_DISCONNE 关闭 命令按钮 button IDC_BUTTON_SENDMSG 发送消息 命令按钮 button IDC_BUTTON_SEND_FIL 传送文件 命令按钮 button IDC_BUTTON_STOP 停止传送 命令按钮 button IDCANCEL退出系统 进程 processIDC_PROGRESS_SEND_F图2—-对话框中的控件对象定义相应的成员变量编程思路:首先在对话框中输入要连接的IP地址,然后单击“启动”按钮,要连接的主机也做相同的操作,两边都准备完事后,两台计算机就可以消息和文件的传输了。
单击“启动”按钮时,处理函数启动了监听线程来启动服务,主要的语句如下:pThreadListen = ::AfxBeginThread(_ListenTcpThread,this);点击“发送消息”按钮时,处理函数启动了消息发送线程来进行消息的传送,语句如下:pThreadSendMsg = ::AfxBeginThread(_SendMsgThread,this);当点击“传送文件”按钮时,处理函数启动了文件传输线程来进行文件传输,语句如下:pThreadSendMsg = ::AfxBeginThread(_SendFileThread,this);下面主要介绍一下要用到的三个线程和一个文件接收处理函数。
首先要产生三个线程对象:CWinThread _ListenTcpThread;CWinThread _SendFileThread;CWinThread _SendMsgThread;三、系统详细设计1.监听线程函数UINT _ListenTcpThread(LPVOID lparam){CFiletranDlg *pDlg=(CFiletranDlg *)lparam;if(pDlg->StopServer==true) return -1;CSocket sockSrvr;pDlg->m_Potr=PORT;//保存当前使用端口,用于关闭int createSucceed=sockSrvr.Create(pDlg->m_Potr);if(createSucceed==0){AfxMessageBox("_ListenTcpThread Create错误!"+pDlg->GetError(GetLastError()));return -1;}int listenSucceed=sockSrvr.Listen(); //开始监听if(listenSucceed==0){AfxMessageBox("_ListenTcpThread Listen错误!"+pDlg->GetError(GetLastError()));return -1;}CSocket recSo;SOCKADDR_IN client;int iAddrSize=sizeof(client);int acceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR *)&client,&iAddrSize); //接受连接并取得对方IPif(acceptSucceed==0){AfxMessageBox("_ListenTcpThread Accept错误!"+pDlg->GetError(GetLastError()));return -1;}sockSrvr.Close();//关闭char flag[FLAG]={0};if(recSo.Receive(flag,FLAG)!=2){return -1;}pDlg->m_type=flag[0];if(pDlg->m_type=='D') return 0;pThreadListen=::AfxBeginThread(_ListenTcpThread,pDlg);pDlg->ReceiveFileMsg(recSo,client);return 0;}2.传送文件线程函数UINT _SendFileThread(LPVOID lparam){CFiletranDlg *pDlg=(CFiletranDlg *)lparam;if(pDlg->StopServer==true) return -1;CSocket sockClient;sockClient.Create();CString ip;pDlg->m_YourIp.GetWindowText(ip);sockClient.Connect(ip, PORT);//首先发送标记F为文件,2int end=0;end=sockClient.Send("F",FLAG);///////////////////////////////////////////////////////////////////发送标志是否成功if(end==SOCKET_ERROR){AfxMessageBox("_SendFileThread Send错误!"+pDlg->GetError(GetLastError()));return -1;}else if(end!=2){AfxMessageBox("文件头错误");return -1;}///////////////////////////////////////////////////////////////////CFile myFile;FILEINFO myFileInfo;if(!myFile.Open(pDlg->m_fileName, CFile::modeRead | CFile::typeBinary)) return -1;myFileInfo.fileLength=myFile.GetLength(); //得到文件大小strcpy(myFileInfo.fileName,myFile.GetFileName());//得到文件名称sockClient.Send(&myFileInfo,sizeof(myFileInfo)); //发送文件信息pDlg->m_Progress.SetRange32(0,myFileInfo.fileLength);myFile.Seek(0,CFile::begin);char m_buf[SIZEFILE]={0};CString strError;int num=0;end=0;int temp=0;for(;;){if(pDlg->FileWork==false){pDlg->FileWork=true;pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);}num=myFile.Read(m_buf, SIZEFILE);if(num==0) break;end=sockClient.Send(m_buf, num);temp+=end;pDlg->m_Progress.SetPos(temp);if(pDlg->FileStop==true){pDlg->FileStop=false;pDlg->FileWork=false;break;}if(end==SOCKET_ERROR){AfxMessageBox("_SendFileThread Send错误!"+pDlg->GetError(GetLastError()));break;}}pDlg->m_Progress.SetPos(0);CString strLocalName;pDlg->GetLocalHostName(strLocalName);CString strLocalIP;pDlg->GetIpAddress(strLocalName,strLocalIP);if(temp==myFileInfo.fileLength)AfxMessageBox("文件发送成功");elseAfxMessageBox("文件发送失败");myFile.Close();sockClient.Close();pDlg->FileWork=false;pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);pDlg->GetDlgItem(IDCANCEL)->EnableWindow(true);pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return 0;}3.发送消息线程函数UINT _SendMsgThread(LPVOID lparam) //TCP发送信息线程{CFiletranDlg *pDlg=(CFiletranDlg *)lparam;if(pDlg->StopServer==true) return -1;CSocket sockClient;sockClient.Create();CString ip,strError;pDlg->m_YourIp.GetWindowText(ip);int conn=sockClient.Connect(ip, PORT);if(conn==0) ///////////////////////////////////{AfxMessageBox("_SendMsgThread Connect错误!"+pDlg->GetError(GetLastError()));sockClient.ShutDown(2);sockClient.Close();AfxEndThread(1L);return 0;}//首先发送标记M为信息,2int end=0;end=sockClient.Send("M",FLAG);if(end==SOCKET_ERROR){AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));return -1;}else if(end!=2){AfxMessageBox("消息头错误");return -1;}CString strMsg=pDlg->message;end=sockClient.Send(strMsg,strMsg.GetLength());if(end==SOCKET_ERROR){AfxMessageBox("_SendMsgThread Send错误!"+pDlg->GetError(GetLastError()));return -1;}int i=0;sockClient.Close();return 0;}4.文件接收处理函数int CFiletranDlg::SaveYourFile(CSocket &recSo, SOCKADDR_IN &client){CString fname;CFileDialog dlg(false); //另存文件FILEINFO myFileInfo;recSo.Receive(&myFileInfo,sizeof(FILEINFO));int fileLength=myFileInfo.fileLength;CString strfileIp,strfileName,strfileLength;strfileIp.Format(inet_ntoa(client.sin_addr));strfileName.Format(myFileInfo.fileName);strfileLength.Format("%f",myFileInfo.fileLength/1024.0);CString title="文件"+strfileName+" 大小"+strfileLength+"KB "+"来在"+strfileIp+" 是否接受";dlg.m_ofn.lpstrTitle=title;//标题条char fileme[500]={0};//必须足够大小strcpy(fileme,strfileIp+strfileName);dlg.m_ofn.lpstrFile=fileme; //文件名称if(dlg.DoModal()==IDOK){fname=dlg.GetPathName(); //得到文件名名称、路径GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_SHOW);}else{GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);GetDlgItem(IDCANCEL)->EnableWindow(true);recSo.Close();return 0;}char buf[SIZEFILE]={0};CFile f(fname,CFile::modeCreate|CFile::modeWrite); //存文件m_Progress.SetRange32(0,fileLength);int n=0; //接受的字节数0表示结束int temp=0;GetDlgItem(IDCANCEL)->EnableWindow(false);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);for(;;){n=recSo.Receive(buf,SIZEFILE); //接受if(n==0) //0表示结束break; //接受完毕f.Write(buf,n);temp+=n;m_Progress.SetPos(temp);if(FileWork==false) FileWork=true;if(FileStop==true){FileStop=false;FileWork=false;break ;}}f.Close();m_Progress.SetPos(0);if(temp==fileLength)MessageBox("文件接受成功");elseMessageBox("文件接受失败");FileWork=false;GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(false);GetDlgItem(IDCANCEL)->EnableWindow(true);GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);return 0;}四、课程设计总结采用多线程方法,利用MFC的CSocket类,可以简单方便的实现计算机用户间的文件传输和消息发送功能。