File Transfer Using CSockets

Environment: VC6 SP4, NT4 SP5

Here are a couple of functions to transfer files between two computers. I haven't seen any CSocket file transfer utilities around so this might just help you. The code consists of two functions. The first function is the "server" and the second function is the "client". Use them accordingly.

Now for the server portion:


void SendFile()
{
 #define PORT 34000 /// Select any free port you wish

 AfxSocketInit(NULL);
 CSocket sockSrvr; 
 sockSrvr.Create(PORT); // Creates our server socket
 sockSrvr.Listen(); // Start listening for the client at PORT
 CSocket sockRecv;
 sockSrvr.Accept(sockRecv); // Use another CSocket to accept the connection


 CFile myFile;
 myFile.Open("C:\\ANYFILE.EXE", CFile::modeRead | CFile::typeBinary); 

 int myFileLength = myFile.GetLength(); // Going to send the correct File Size

 sockRecv.Send(&myFileLength, 4); // 4 bytes long
		
 byte* data = new byte[myFileLength]; 

 myFile.Read(data, myFileLength);

 sockRecv.Send(data, myFileLength); //Send the whole thing now

 myFile.Close();
 delete data;

 sockRecv.Close();
}
And the client of course:

void GetFile()
{
 #define PORT 34000 /// Select any free port you wish

 AfxSocketInit(NULL);
 CSocket sockClient;
 sockClient.Create();

 // "127.0.0.1" is the IP to your server, same port
 sockClient.Connect("127.0.0.1", PORT); 

 int dataLength;
 sockClient.Receive(&dataLength, 4); //Now we get the File Size first
		
 byte* data = new byte[dataLength];
 sockClient.Receive(data, dataLength); //Get the whole thing

 CFile destFile("C:\\temp\\ANYFILE.EXE", 
  CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);

 destFile.Write(data, dataLength); // Write it

 destFile.Close();

 delete data;
 sockClient.Close();
}
And thats all folks! Just make sure the server function runs before the client. Im sure many improvements can be made to this like not sending the file in one big chunk and not hardcoding many of the functions. In any case this should be easy enough for anyone to just "pop" into their project for a quick client/server transfer solution.

Downloads

Download demo project - 9 Kb
Download source code for functions- 1 Kb


Comments

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: March 19, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The 2015 Enterprise Mobile Application Survey asked 250 mobility professionals what their biggest mobile challenges are, how many employees they are equipping with mobile apps, and their methods for driving value with mobility. Join Dan Woods, Editor and CTO of CITO Research, and Alan Murray, SVP of Products at Apperian, as they break down the results of this survey and discuss how enterprises are using mobile application management and private …

  • On-demand Event Event Date: February 12, 2015 The evolution of systems engineering with the SysML modeling language has resulted in improved requirements specification, better architectural definition, and better hand-off to downstream engineering. Agile methods have proven successful in the software domain, but how can these methods be applied to systems engineering? Check out this webcast and join Bruce Powel Douglass, author of Real-Time Agility, as he discusses how agile methods have had a tremendous …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date