VC++网络编程-文件传输
来源:互联网 发布:大数据采集软件有哪些 编辑:程序博客网 时间:2024/06/07 10:18
在SOCKET编程中,以前学习的时候都是简单的字符传输,而在实际的应用中,经常需要传输文件,其实网络上的文件传输都是先把数据转化为字节流,当然,最底层的是01二进制数据的传输,但是这部在我们讨论范围之内,其实现在还只是研究小文件怎么传输,当文件很大时,需要用到断点续传。
好了,要传输文件,首先先要计算出服务器端文件的大小,然后打开数据,读入到缓冲区中,首先发送文件的大小给客户端,然后客户端根据收到的文件大小,重新建立文件。
服务器端代码如下:
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<char *>(pBuffer),dwReadSize,NULL);//发送数据文件CloseHandle(hFile);//关闭文件
客户端代码如下:
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 filedata, // data buffernDatalen, // number of bytes to write(LPDWORD)&nDatalen, // number of bytes writtenNULL // overlapped buffer);
或者客户端重建文件的代码如下:
FILE *fp = fopen("recv.rar","w+b");fwrite(data,nDatalen,1,fp);fclose(fp);
但是,就目前的这代码,还只适合传输数据量比较小的文件,当文件比较大时,就不能忍受了,所以就必须研究断点续传,以后研究吧。本文只适合初学者,大牛们就当是小说。这只是最基本的传输代码,后面会逐步完善。
- VC++网络编程-文件传输
- VC++网络编程-文件传输
- 网络编程练习 ftp 文件传输
- Linux网络编程:socket文件传输
- 基于网络编程的文件传输
- VC中使用Socket网络文件传输结构
- VC中使用Socket网络文件传输结构
- Linux网络编程:socket文件传输范例
- Windows网络编程:winsock文件传输范例
- Linux网络编程之socket文件传输示例
- Linux网络编程之socket文件传输示例
- Linux网络编程之socket文件传输示例
- Linux网络编程之socket文件传输示例
- Linux网络编程之socket文件传输示例
- 网络编程——TCP文件传输
- Linux网络编程之SOCKET文件传输
- Linux网络编程之SOCKET文件传输
- 【网络编程】UDP数据传输及文件传输实验
- kmp算法
- 删除已卸载的输入法占用的快捷键
- IDE技术
- 线程池一
- mysql导出insert 的sql语句
- VC++网络编程-文件传输
- java线程之间的通信
- 传智播客成都Java培训中心,学生老师共举杯庆丰收
- Java线程(十二):Exchanger-兄弟线程的信息交换
- 名词解释
- 远程终端链接解决vi中文乱码问题
- android gridview取消默认选中
- 国家请客吃什么
- 在Windows下使用gcc编译器