VC怎么进行文件传输?

VC怎么进行文件传输?,第1张

vc对文件进行网络传输要用到套接字,传输效率不低,像ie那样满足用户需要也没有问题,但是实现越来很复杂,想传输文件夹思路只能是把文件夹里面的文件一个一个的传输,同时把文件夹名以及文件名也传输过去,实现上传和下载系统也有专门的函数,不用你自己去写了,但是你想实现的高级一点就自己写吧。

1. 首先大部分语言都能实现这个功能

2. 你要求的功能可以说和语言无关,你需要是一个软件?

3. 共享文件如果不用p2p的方式,还有很多别的方式,如ftp和http方式,装相应的服务器软件,比如说serv-u之类的。就可以了。

4. 如果是局域网的话,那么双方最好都申请动态域名的。

用VC6.0建立两个WIndows32 Console Application程序,并且选择一个支持MFC的程序,第一个程序中输入:

// server.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "server.h"

#include<afxsock.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__

#endif

/////////////////////////////////////////////////////////////////////////////

// The one and only application object

CWinApp theApp

using namespace std

typedef struct _SOCKET_STREAM_FILE_INFO {

TCHAR szFileTitle[128]//文件的标题名

DWORD dwFileAttributes//文件的属性

FILETIME ftCreationTime//文件的创建时间

FILETIME ftLastAccessTime//文件的最后访问时间

FILETIME ftLastWriteTime//文件的最后修改时间

DWORD nFileSizeHigh//文件大小的高位双字

DWORD nFileSizeLow//文件大小的低位双字

DWORD dwReserved0//保留,为0

DWORD dwReserved1//保留,为0

} SOCKET_STREAM_FILE_INFO, * PSOCKET_STREAM_FILE_INFO

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0

// initialize MFC and print and error on failure

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{

// TODO: change error code to suit your needs

cerr <<_T("Fatal Error: MFC initialization failed") <<endl

nRetCode = 1

}

else

{

// TODO: code your application's behavior here.

CString strHello

strHello.LoadString(IDS_HELLO)

cout <<(LPCTSTR)strHello <<endl

}

CSocket sockClient

sockClient.Create()

if(!sockClient.Connect("127.0.0.1", 800))

{

AfxMessageBox("连接到对方机器失败!")

return 0

}

SOCKET_STREAM_FILE_INFO StreamFileInfo

sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO))

CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)

UINT dwRead = 0

while(dwRead)

{

byte* data = new byte[1024]

memset(data,0,1024)

UINT dw=sockClient.Receive(data, 1024)

destFile.Write(data, dw)

dwRead+=dw

}

SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,

&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime)

destFile.Close()

SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes)

sockClient.Close()

AfxMessageBox("接收完毕!")

return nRetCode

}

另外一个程序输入:

// client.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "client.h"

#include <afxsock.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__

#endif

/////////////////////////////////////////////////////////////////////////////

// The one and only application object

CWinApp theApp

using namespace std

typedef struct _SOCKET_STREAM_FILE_INFO {

TCHAR szFileTitle[128]//文件的标题名

DWORD dwFileAttributes//文件的属性

FILETIME ftCreationTime//文件的创建时间

FILETIME ftLastAccessTime//文件的最后访问时间

FILETIME ftLastWriteTime//文件的最后修改时间

DWORD nFileSizeHigh//文件大小的高位双字

DWORD nFileSizeLow//文件大小的低位双字

DWORD dwReserved0//保留,为0

DWORD dwReserved1//保留,为0

} SOCKET_STREAM_FILE_INFO, * PSOCKET_STREAM_FILE_INFO

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0

// initialize MFC and print and error on failure

if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{

// TODO: change error code to suit your needs

cerr <<_T("Fatal Error: MFC initialization failed") <<endl

nRetCode = 1

}

else

{

// TODO: code your application's behavior here.

CString strHello

strHello.LoadString(IDS_HELLO)

cout <<(LPCTSTR)strHello <<endl

}

CFile myFile

CString filename="123.txt"

if(!myFile.Open(filename, CFile::modeRead | CFile::typeBinary))

{

AfxMessageBox("文件不存在!",MB_OK|MB_ICONERROR)

return 0

}

CSocket sockSrvr

sockSrvr.Create(800)

sockSrvr.Listen()

CSocket sockRecv

sockSrvr.Accept(sockRecv)

SOCKET_STREAM_FILE_INFO StreamFileInfo

WIN32_FIND_DATA FindFileData

FindClose(FindFirstFile(filename,&FindFileData))

memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO))

strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle())

StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes

StreamFileInfo.ftCreationTime = FindFileData.ftCreationTime

StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime

StreamFileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime

StreamFileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh

StreamFileInfo.nFileSizeLow = FindFileData.nFileSizeLow

sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO))

UINT dwRead=0

while(dwRead)

{

byte* data = new byte[1024]

UINT dw=myFile.Read(data, 1024)

sockRecv.Send(data, dw)

dwRead+=dw

}

myFile.Close()

sockRecv.Close()

AfxMessageBox("发送完毕!")

return nRetCode

}

现在应该可以运行了,然后根据你的需要修改


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6080070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存