使用CSockets进行文件传送

本文配套源码

这是一对实现在两台计算机间传送文件的函数,我没有看到过使用CSocket进行文件传送的代码,希望此代码对你有用.代码中包含两个函数,第一个用于服务器端,第二个用于客户端.

需要说明的是本文提供的方法并不适用于大型文件的传送.

下面给出服务器端代码:

void SendFile()
{
#define PORT 34000 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT); // Creates our server socket
sockSrvr.Listen(); // Start listening for the client at PORT
CSocket sockRecv;
sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection
CFile myFile;
myFile.Open("C:\\ANYFILE.EXE", CFile::modeRead | CFile::typeBinary);
int myFileLength = myFile.GetLength(); // Going to send the correct File Size
sockRecv.Send(&myFileLength, 4); // 4 bytes long

byte* data = new byte[myFileLength];
myFile.Read(data, myFileLength);
sockRecv.Send(data, myFileLength); //Send the whole thing now
myFile.Close();
delete data;
sockRecv.Close();
}
以下是客户端代码 void GetFile()
{
#define PORT 34000 /// Select any free port you wish
AfxSocketInit(NULL);
CSocket sockClient;
sockClient.Create();
// "127.0.0.1" is the IP to your server, same port
sockClient.Connect("127.0.0.1", PORT);
int dataLength;
sockClient.Receive(&dataLength, 4); //Now we get the File Size first

byte* data = new byte[dataLength];
sockClient.Receive(data, dataLength); //Get the whole thing
CFile destFile("C:\\temp\\ANYFILE.EXE",
 CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
destFile.Write(data, dataLength); // Write it
destFile.Close();
delete data;
sockClient.Close();
}

最好确认服务器端函数在客户端函数之前运行,本文的代码可以方便地添加到工程中,解决服务器/客户模型中的文件传送问题.

时间: 2024-11-03 22:16:10

使用CSockets进行文件传送的相关文章

基于TCP的局域网多用户通信、文件传送程序详解

看了袁渊先生在VC知识库<在线杂志>第14期发表的文章<基于TCP/IP的局域网多用户通信>,感觉受益颇多,但也觉得里面有一些不太完善的地方,具体来说主要有: 两个服务器单独运行,且主线程均阻塞,用户界面死锁,不便于控制: 聊天服务器线程和互斥量的使用可能导致死锁: 不能实现文件传送(文件传送可不能由服务器转发,否则非把它累趴下不可^-^): 不能由用户进行网络设置,所以在不同的网络使用必须修改源程序等等: 我在此基础上重新设计编写了一个系统,具体如下: 一.构架设计 整个系统分为

WinRAR文件传送时发生断点的续传方法

  我们常常遇到文件在传送的过程中,因为一些意外有时候会出现断点的状况,比如说在使用WinRAR压缩文件的时候.使用QQ传送文件的时候,设置是使用FlashFXP上传文件的时候,那么,遇到传送文件断点的时候该怎么续传呢?下面就一起来看看小编根据不同情况为大家分享的解决方法吧! 一.用WinRAR实现断点续传 我们在复制包含大量文件的文件夹时,如果某个文件损坏或者正在被系统使用,复制操作就会被终止,尽管复制了一部分文件到目的地,如果文件众多,将不知道哪些文件已经复制,而哪些文件还没有复制.通常的情

IPMsg一款开源的局域网消息和文件传送工具

IPMsg 是一款开源的局域网消息和文件传送工具,其最大的优点是可以直接传送文件夹,并且传送速度非常快,基于 http://www.aliyun.com/zixun/aggregation/29912.html">TCP/IP(UDP),可运行于多种操作平台(Win/Mac/UNIX/Java).并实现跨平台信息交流.不需要服务器支持,支持文件/文件夹的传送,通讯数据采用 RSA/Blofish 加密,十分小巧, 简单易用, 而且你可以完全免费使用它. - IPMsg 是一款局域网内即时通

virtualbox-苹果笔记本主机如何将文件传送到virtual box中安装的ubuntu虚拟机中

问题描述 苹果笔记本主机如何将文件传送到virtual box中安装的ubuntu虚拟机中 各位朋友们好:我的主机是mac os x系统的,然后下载了virtual box虚拟机,并且在虚拟机中安装了ubuntu,现在我想把mac os x主机/Users/a.txt传送到ubuntu系统的/root目录下,应该怎么弄呢?可以通过scp实现传输吗?如果可以,应该怎么写这个命令呢? 十分感谢 解决方案 scp /path/local_filename username@servername:/pa

在c#中怎么配置一个文件,监听是否有.jpg文件传送过来!!!

问题描述 在c#中怎么配置一个文件,监听是否有.jpg文件传送过来,有的话执行打印并删除.多谢大神们了! 解决方案 解决方案二:FileSystemWatcher,查下这个的用法你就知道了解决方案三:不存在所谓的送过来的概念,倒是可以按照一楼的办法监控某个文件夹中是否有新文件写入,实时性比较强,但楼主说用完要删除,所以感觉没必要,只要每隔一段时间查看一下文件夹就行了.解决方案四:配置文件?jpg文件传过来?完全没看懂.

如何用VB.NET实现将本地文件传送到服务器上指定路径下?

问题描述 我在服务器上建立了一个可以完全访问的IIS路径,想把本地添加的图片全部传送到服务器上指定文件夹下,我的问题有以下三点:1.怎么判断这个网络路径下的文件夹是否存在:2.如果这个网络路径下的文件夹不存在,如何新建:3.传送文件的过程怎么实现这些功能都需要使用VB.NET来实现 解决方案 解决方案二:建立了一个可以完全访问的IIS路径什么概念,发布了个网站,里面只有文件夹,没有程序??解决方案三:FTP或页面上传?

Linux简明系统维护手册(五)

(12)配置samba服务器 ..... (13)构建基于Linux的VPN网络 构建VPN几乎是Linux的最高级应用之一了,学会了这项技术,是足以使你自豪的资本.VPN的主要用途就是建立一个加密的通信机制,然后通过把所有的你的子网的信息按照特定的方式加密传输,构成一个逻辑上的虚拟的网络.简单的说,就是一个Linux系统的IP层加密解决方案.这里面需要用到不少组件,下面一一介绍. 1.准备工作和安装 1.1 从http://www.kernel.org下载2.4.X的内核,除了2.4.15版本

CorelDraw丢失字体而系统字体正常

问:CorelDRAW中原有的字体怎么失踪了? CorelDRAW时间用长了,经常会发现丢失字体的现象.检查Windows下面的Fonts目录,却发现所有的字体均完好无损,打开其它软件(如Word),原来的字体也都还在,这就奇怪了,重装字体也不能解决问题. 答:既然简单的重装不行,那就彻底一点改动注册表!因为所有的字体在最开始安装的时候都已在注册表中注过册的,所以需要彻底清除注册表中的字体部分. 先将Windows下的整个Fonts目录复制到根目录下,然后打开注册表(注意在打开之前备份),找到H

光纤故障如何快速判断原因

1. Power灯不亮 电源故障 2. Link灯不亮 故障可能有如下情况: a) 检查光纤线路是否断路 b)检查光纤线路是否损耗过大,超过设备接收范围 c)检查光纤接口是否连接正确,本地deTX 与 远方的RX 连接,远方的TX 与本地的RX连接. d) 检查光纤连接器是否完好插入设备接口,跳线类型是否与设备接口匹配,设备类型是否与光纤匹配,设备传输长度是否与距离匹配. 3.电路Link灯不亮 故障可能有如下情况: a)检查网线是否断路 b)检查连接类型是否匹配:网卡与路由器等设备使用交叉线,