File Transfer Using CSockets | CodeGuru

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 […]

Written By
CodeGuru Staff
CodeGuru Staff
Jan 15, 2000
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

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

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.