设为首页 加入收藏

TOP

VC++网络编程-文件传输
2014-11-23 17:50:21 】 浏览:837
Tags:网络编程 文件 传输

在SOCKET编程中,以前学习的时候都是简单的字符传输,而在实际的应用中,经常需要传输文件,其实网络上的文件传输都是先把数据转化为字节流,当然,最底层的是01二进制数据的传输,但是这部在我们讨论范围之内,其实现在还只是研究小文件怎么传输,当文件很大时,需要用到断点续传。
好了,要传输文件,首先先要计算出服务器端文件的大小,然后打开数据,读入到缓冲区中,首先发送文件的大小给客户端,然后客户端根据收到的文件大小,重新建立文件。
服务器端代码如下:
[cpp]
HANDLE hFile;

hFile = CreateFile(_T("D:\\学习资料\\复试上机题目.rar"), // open MYFILE.TXT
GENERIC_READ, // open for reading
FILE_SHARE_READ, // share for reading
NULL, // no security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template

if (hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Could not open file.")); // process error
}

DWORD dwFileSize = 0;
dwFileSize = GetFileSize(hFile,NULL);
byte *pBuffer = new byte[dwFileSize];
DWORD dwReadSize = 0; //文件长度
::ReadFile(hFile,pBuffer,dwFileSize,&dwReadSize,NULL);
send(sockConn,(const char*)&dwReadSize,4,0); //发送文件长度
send(sockConn,reinterpret_cast(pBuffer),dwReadSize,NULL); //发送数据文件

CloseHandle(hFile); //关闭文件

客户端代码如下:
[cpp]
int nDatalen = 0;
recv(sockClient,(char*)&nDatalen,4,0);
printf("%d\n",nDatalen);

byte *data = new byte[nDatalen];
recv(sockClient,(char*)data,nDatalen,0);

HANDLE hFile;

hFile = CreateFile("recv.rar", // open MYFILE.TXT
GENERIC_WRITE, // open for reading
FILE_SHARE_WRITE, // share for reading
NULL, // no security
CREATE_NEW, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template

if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open file."); // process error
}

WriteFile(
hFile, // handle to file
data, // data buffer
nDatalen, // number of bytes to write
(LPDWORD)&nDatalen, // number of bytes written
NULL // overlapped buffer
);


或者客户端重建文件的代码如下:
[cpp]
FILE *fp = fopen("recv.rar","w+b");
fwrite(data,nDatalen,1,fp);
fclose(fp);

但是,就目前的这代码,还只适合传输数据量比较小的文件,当文件比较大时,就不能忍受了,所以就必须研究断点续传,以后研究吧。本文只适合初学者,大牛们就当是小说。这只是最基本的传输代码,后面会逐步完善。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VS2012编写获取ARP命令 下一篇VC界面开发

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目