环境: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>)!