資源簡介
摘要:VC/C++源碼,網絡相關,點對點,文件傳輸
簡易的VC++點對點文件傳輸,暫時沒有運行截圖,文件傳輸的功能并不強大,但是實現過程既簡單又經典,說明了文件傳輸的原理。

代碼片段和文件信息
//?SimpleFileTrans.cpp?:?Defines?the?entry?point?for?the?console?application.
//?Download?by?http://www.codefans.net
#include?“stdafx.h“
#include?“SimpleFileTrans.h“
#ifdef?_DEBUG
#define?new?DEBUG_NEW
#undef?THIS_FILE
static?char?THIS_FILE[]?=?__FILE__;
#endif
#include?
#include?
#include?
#include?
#include?
#include?
#define?SERVER_LISTEN_PORT?4000
#define?SERVER_IP?“10.214.50.124“
void?SendFile(char?*filename);
void?GetFile(char?*filename=NULL);
BOOL?SendMessage(SOCKET?sock?const?char*?buffer?int?bufferLen);
BOOL?ReceiveMessage(SOCKET?sock?char*?buffer?int?bufferLen);
//argv[0]??Module?name
//argv[1]??Switch
// ???s?-send?file
//?????????r?-receive?file
//argv[2]??File?name
//?????????If?user?sets?argv[1]?as?‘s‘?file?name?is?necessary.
//?????????If?user?sets?argv[1]?as?‘r‘?file?name?is?optional.
//?????????Defaultly?we?set?filename?as?its?raw?name?from?server.
int?_tmain(int?argc?TCHAR*?argv[]?TCHAR*?envp[])
{
if(argc==1)
return?1;
if(argv[1][0]==‘s‘)
{
if(argc!=3)
return?1;
SendFile(argv[2]);
}
else?if(argv[1][0]==‘r‘)
{
if(argc<2||argc>3)
return?1;
if(argc==2)
GetFile();
else
GetFile(argv[2]);
}
else
{
cerr<<“s/r?send?or?receive!“< return?1;
}
return?0;
}
void?SendFile(char?*filename)
{
WSADATA?wsaData;
SOCKET?sock;
sockaddr_in?localAddrclientAddr;
SOCKET?clientSock;
int?sizeAddr=sizeof(sockaddr);
char?*data;
ifstream?file;
filebuf?*fB;
int?length;
BOOL?bRet;
char?sDrive[_MAX_DRIVE]; char?sDir[_MAX_DIR];
char?sFname[_MAX_FNAME]; char?sExt[_MAX_EXT];
assert(filename);
_splitpath(filename?sDrive?sDir?sFname?sExt);
strcat(sFnamesExt);
if(WSAStartup(MAKEWORD(?2?2?)?&wsaData)!=0)
{
cerr<<“Socket?init?error“< return;
}
sock=socket(AF_INET?SOCK_STREAM0);
localAddr.sin_addr.s_addr=htonl(INADDR_ANY);
localAddr.sin_family=AF_INET;
localAddr.sin_port=htons(SERVER_LISTEN_PORT);
if(bind(sock(const?struct?sockaddr*)&?localAddrsizeAddr)==SOCKET_ERROR)
{
cerr<<“Bind?error!“< goto?EXIT;
}
cout<<“Listening?at?port?“<
listen(sock1);//?峨家Α鋇Μ硈鋇
if((clientSock=accept(sock(struct?sockaddr*)&clientAddr&sizeAddr))==INVALID_SOCKET)
{
cerr<<“Accept?error“< goto?EXIT;
}
cout<<“A?connection?has?been?focused!“<
//send?file?name‘s?length?and?buffer?content
length=strlen(sFname);
SendMessage(clientSock(const?char*)&lengthsizeof(int));
SendMessage(clientSocksFnamelength);
//ゴ秨璶祇癳郎
file.open(filenameios::binary);
if(file.fail())
{
cerr<<“Fail?opening?file?“< goto?EXIT;
}
cout<<“Sending?file?now!“< fB=file.rdbuf();
length=fB->seekoff(0ios::endios::in)-fB->seekoff(0ios::begios::in);
fB->seekoff(0ios::begios::in);
//?祇癳郎へ倒鋇Μよ
SendMessage(cl
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1668??2006-08-09?22:26??Lelecode.com\SimpleFileTrans\ReadMe.txt
?????文件????????456??2006-08-09?22:37??Lelecode.com\SimpleFileTrans\Resource.h
?????文件??????16920??2012-03-20?09:41??Lelecode.com\SimpleFileTrans\SimpleFileTrans.aps
?????文件????????252??2005-11-08?19:09??Lelecode.com\SimpleFileTrans\SimpleFileTrans.clw
?????文件???????5464??2012-03-20?09:42??Lelecode.com\SimpleFileTrans\SimpleFileTrans.cpp
?????文件???????4406??2005-11-08?19:09??Lelecode.com\SimpleFileTrans\SimpleFileTrans.dsp
?????文件????????555??2005-11-08?19:09??Lelecode.com\SimpleFileTrans\SimpleFileTrans.dsw
?????文件????????353??2006-08-09?22:37??Lelecode.com\SimpleFileTrans\SimpleFileTrans.h
?????文件???????1458??2006-08-08?02:33??Lelecode.com\SimpleFileTrans\SimpleFileTrans.rc
?????文件????????302??2006-08-09?06:08??Lelecode.com\SimpleFileTrans\StdAfx.cpp
?????文件???????1083??2006-08-09?22:37??Lelecode.com\SimpleFileTrans\StdAfx.h
?????目錄??????????0??2012-03-20?09:43??Lelecode.com\SimpleFileTrans
?????目錄??????????0??2012-03-20?09:39??Lelecode.com
-----------?---------??----------?-----??----
????????????????32917????????????????????13
- 上一篇:巖土工程的D-P模型
- 下一篇:一個監護儀上位機C++程序
評論
共有 條評論