Click here to Skip to main content
15,892,161 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
I need a simple program. And local file transfer with socket or anything pls help me. :(

What I have tried:

I tried this:

CLIENT code:
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;

namespace FileSharingClient
{
    public partial class Form1 : Form
    {
        private static string shortFileName = "";
        private static string fileName = "";
        public Form1()
        {
            InitializeComponent();
        }

        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(txtHost.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
         {

         }
        }
    }
}


SERVER code:
C#
<pre>using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading.Tasks;

namespace FileSharingServer
{
    public partial class Form1 : Form
    {

        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
            {

            }
        }
    }
}


Its not working help me and Its not my code, I found some sites this code. help me
Posted
Updated 4-May-18 11:55am
v2

Saying just that it's not working does not give information about possible problems you have.

However, one obvious problem with both of the code blocks is that if something goes wrong, user is not informed and the problem is not logged. This is because you have empty catch blocks.

To get started with, add at least a message box or logging into the catch blocks to get more information about potential problems. If an exception occurs, investigate the whole exception stack (inner exceptions) to get a clear picture what causes a problem. This way you get something concrete to work with.

ADDITION
--------
One simple way for you to investigate the problem could be just to comment out the try catch statements. This way when an exception is thrown, it's catch by Visual Studio. When an exception occurs investigate it Using Visual Studio debugging capabilities.

Few articles to start with:
- Get started with the debugger - Visual Studio | Microsoft Docs[^]
- Manage exceptions with the Visual Studio debugger - Visual Studio | Microsoft Docs[^]
 
Share this answer
 
v2
Comments
Wendelius 4-May-18 23:54pm    
See the updated answer.
Firstly thank you for answered to me :) I did this but I didnt understanding anything. I'm beginner in C#. I have server and Client to message program. I will use file transfer in this.
 
Share this answer
 
Comments
Patrice T 4-May-18 18:28pm    
To discuss with the author of a solution, use 'Have a Question or Comment ?' button at bottom of solution.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900