File Sharing Application in C#



Sequel to my blog post on "A Client Server File Sharing Application in C#" I have received several emails asking for the application to be made a whole package instead of having it as separate client and server applications. In order not to continue sending the solution as email to people again, I have decided to make it a blog post and make the whole package available.

The application is written in C# and it will allow files to be sent from one computer to another on the network. It attempts to compile what both the client and server applications in my previous post- A Client Server File Sharing Application in C# do into a single project. To gain a full understanding of the workings, I will recommend you read the post.

The full listing of the source code is below.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FileSharingApp
{
    public partial class Form1 : Form
    {
        private static string shortFileName = "";
        private static string fileName = "";

         public delegate void FileRecievedEventHandler(object source, 
          string fileName);

        public event FileRecievedEventHandler NewFileRecieved;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.NewFileRecieved+=new FileRecievedEventHandler
            (Form1_NewFileRecieved);
        }

        private void Form1_NewFileRecieved(object sender, string 
         fileName)
        {
            this.BeginInvoke(
            new Action(
            delegate()
            {
                MessageBox.Show("New File Recieved\n"+fileName);
                System.Diagnostics.Process.Start("explorer", @"c:\");
            }));
        }

        private void btnListen_Click(object sender, EventArgs e)
        {
            int port = int.Parse(txtHost.Text);
            Task.Factory.StartNew(() => HandleIncomingFile(port));
            MessageBox.Show("Listening on port"+port);
        }

        public void HandleIncomingFile(int port)
        {
          try
            {
                TcpListener tcpListener = new TcpListener(port);
                tcpListener.Start();
                while (true)
                {
                  Socket handlerSocket = tcpListener.AcceptSocket();
                    if (handlerSocket.Connected)
                    {
                     string fileName = string.Empty;
                     NetworkStream networkStream = new NetworkStream
                      (handlerSocket);
                     int thisRead = 0;
                     int blockSize = 1024;
                     Byte[] dataByte = new Byte[blockSize];
                     lock (this)
                     {
                      string folderPath = @"c:\";
                      handlerSocket.Receive(dataByte);
                      int fileNameLen = BitConverter.ToInt32(dataByte,
                       0);
                      fileName = Encoding.ASCII.GetString(dataByte, 4, 
                       fileNameLen);
                      Stream fileStream = File.OpenWrite(folderPath + 
                       fileName);
                      fileStream.Write(dataByte, 4+fileNameLen,(
                       1024-(4+fileNameLen)));
                      while (true)
                      {
                       thisRead = networkStream.Read(dataByte, 0, 
                        blockSize);
                       fileStream.Write(dataByte, 0,thisRead);
                       if (thisRead == 0)
                        break;
                      }
                      fileStream.Close();

                    }
                    if (NewFileRecieved != null)
                     {
                       NewFileRecieved(this, fileName);
                     }
                    handlerSocket = null;
                    }
                }

            }
            catch
            {

            }
        }

         private void btnBrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Title = "File Sharing Client";
            dlg.ShowDialog();
            txtFile.Text = dlg.FileName;
            fileName = dlg.FileName;
            shortFileName = dlg.SafeFileName;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string ipAddress = txtIPAddress.Text;
            int port = int.Parse(txtPort.Text);
            string fileName = txtFile.Text;
            Task.Factory.StartNew(() => SendFile(ipAddress,port,
             fileName,shortFileName));
            MessageBox.Show("File Sent");
        }

        public void SendFile(string remoteHostIP, int remoteHostPort
           , string  longFileName, string shortFileName)
        {
         try
         {
          if(!string.IsNullOrEmpty(remoteHostIP)) 
          { 
            byte[] fileNameByte = Encoding.ASCII.GetBytes
             (shortFileName); byte[] fileData =
              File.ReadAllBytes(longFileName); 
             byte[] clientData
                 = new byte[4 + fileNameByte.Length 
                + fileData.Length]; 
             byte[] fileNameLen = BitConverter.GetBytes(
              fileNameByte.Length); 
             fileNameLen.CopyTo(clientData, 0); 
             fileNameByte.CopyTo(clientData,4);
             fileData.CopyTo(clientData, 4 + fileNameByte.Length);
            TcpClient clientSocket = new TcpClient(remoteHostIP,
           remoteHostPort);
             NetworkStream networkStream = clientSocket.GetStream(); 
          networkStream.Write(clientData,
                  0, clientData.GetLength
              (0)); networkStream.Close(); }
         }
         catch
         {

         }
        }
    }
}    

The Complete source code of the application is available for download Here




Share this page on


  8 People Like(s) This Page   Permalink  

 Click  To Like This Page

comments powered by Disqus

page