通用技术 C++:两台机器间传输文件的函数

careerkr · 2025年11月24日 · 89 次阅读

环境:VC6SP4,NT4SP5   
这里有两个在两台计算机之间传输文件的函数。在我身边并没有看到什么好的 CSOCKET 文件传输函数,于是我决定帮你写一个。此代码分为 Server 端和 Client 端。   
Server(发送) 端:   
voidSendFile()   
{   
#definePORT34000///Selectanyfreeportyouwish   
    
AfxSocketInit(NULL);   
CSocketsockSrvr;   
sockSrvr.Create(PORT);//Createsourserversocket   
sockSrvr.Listen();//StartlisteningfortheclientatPORT   
CSocketsockRecv;   
sockSrvr.Accept(sockRecv);//UseanotherCSockettoaccepttheconne   
ction   
    
    
CFilemyFile;   
myFile.Open("C:\ANYFILE.EXE",CFile::modeRead|CFile::typeBinary);   
    
    
intmyFileLength=myFile.GetLength();//GoingtosendthecorrectF   
ileSize   
    
sockRecv.Send(&myFileLength,4);//4byteslong   
    
byte*data=newbyte[myFileLength];   
    
myFile.Read(data,myFileLength);   
    
sockRecv.Send(data,myFileLength);//Sendthewholethingnow   
    
myFile.Close();   
deletedata;   
    
sockRecv.Close();   
}   
    
Client(接收) 端:   
voidGetFile(){   
    
#definePORT34000///Selectanyfreeportyouwish   
    
AfxSocketInit(NULL);   
CSocketsockClient;   
sockClient.Create();   
    
//"127.0.0.1"istheIPtoyourserver,sameport   
sockClient.Connect("127.0.0.1",PORT);  intdataLength;   
    
sockClient.Receive(&dataLength,4);//NowwegettheFileSizefirst   
    
    
byte*data=newbyte[dataLength];   
sockClient.Receive(data,dataLength);//Getthewholething   
    
CFiledestFile("C:\temp\ANYFILE.EXE",   
  CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);   
    
destFile.Write(data,dataLength);//WriteitdestFile.Close();delet   
edata;   
    
sockClient.Close();   
}   
(有没有看到,既然能先传文件大小,后传文件,那么仿造这个例子,可以把文件分成多段输)如果再做一个线程,那就更完美了。   
在此感谢所有的朋友!Server 端必须在 Client 端之前运行。我相信还有许多可以改进的地方,例如一次传输一个文件,可以将它分成多块 (我好像在 C 版中听某位大虾说过 CSocket 的 Send 一次最多只能传 64k,不知是对还是错,如不能传则将文件分段)。在任何时候都可以很方便地加入到一个工程中。
转自:VickenSimonian

(顺便吆喝一句,民族企业核心部门年底前的一波岗,base 武汉、深圳、苏州等地,前、后端 or 测试>>>机会;语言:Java、Js、测试、python、ios、安卓、C++ 等https://jsj.top/f/o38ijj<;/u>)!

暫無回覆。
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册