locked
Help me fix a type of variable in program send a recieve file. RRS feed

  • Question

  • Hi everybody, I have write a program send and recieve a large file , now it can transfer a file size 1.5G but when I choose  large file about 2G it fail and notify:

    Here is Project:

    http://www.mediafire.com/?p9b2xj2970d7cqb

    Please read and help me, it code is short, no long, I need a help I'm nearing to send it for my teacher, I hope everyone will help me.



    • Edited by David Robbsan Monday, December 17, 2012 8:47 AM
    • Moved by Lisa Zhu Tuesday, December 18, 2012 2:56 AM network related (From:Visual C# General)
    Monday, December 17, 2012 8:43 AM

All replies

  • Can you place the code segment here instead of going to the site to download?

    chanmm


    chanmm

    Monday, December 17, 2012 11:50 AM
  • Hi David,

    From the code you posted, I think it is better to move this thread to Network Class Library (System.Net) Forum.

    There are more experts in this aspect, so you will get  better support and  may have more luck getting answers.

    Thanks for your understanding.

    Regards,


    Lisa Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    • Edited by Lisa Zhu Tuesday, December 18, 2012 2:56 AM
    Tuesday, December 18, 2012 2:55 AM
  • Here is Server code I have fix. So when I choose fie *iso about 2.5G it still fail ? if i replace to ToInt64 it not appropriate

    I think it fail in function:

    private void OnUpdatepgdstatus(long s, long p)
    {
        progressbar.Maximum = Convert.ToInt32(s);
        progressbar.Value = Convert.ToInt32(p);
    }
    namespace server
    {
        public partial class Form1 : Form
        {
            public delegate void UpdateListBoxCallBack(string s);
            public delegate void UpdateLabelCallBack(string s);
            public delegate void Updatepgdstatus(long s, long p);
            private NetworkStream nwkStream = null;
            private Socket socketForClient = null;
            private TcpListener tcpListener = null;
            private Stream stmReader = null;
            private Stream stmWriter = null;
            private Thread t = null;
    
            public Form1()
            {
                Control.CheckForIllegalCrossThreadCalls = false;
                InitializeComponent();
                IPHostEntry ips = Dns.GetHostByName(Dns.GetHostName());
                ipServer.Text = ips.AddressList[0].ToString();
                label5.Text = null;
            }
    
            private void btnBrowse_Click(object sender, EventArgs e)
            {
                txtFileName.Clear();
                OpenFileDialog fileDialog = new OpenFileDialog();
                fileDialog.Title = "Choose file to send";
                fileDialog.Filter = "Text Files (*.txt)|*.txt|Word Documents" + "(*.doc)|*.doc|All Files (*.*)|*.*";
                fileDialog.Multiselect = true;
                fileDialog.ShowReadOnly = true;
                if (fileDialog.ShowDialog(this) == DialogResult.OK)
                {
                    txtFileName.Text = fileDialog.FileName;
                    lblMessage.Text = null;
                }
            }
    
            private void btnStart_Click(object sender, EventArgs e)
            {
                t = new Thread(new ThreadStart(startSever));
                txtFileName.Clear();
                lblMessage.Text = "Server have start!";
                lblprogressbar.Text = "";
                progressbar.Value = 0;
            }
    
            private void startSever()
            {
                try
                {
                    set1("Listening");
                    IPEndPoint ip = new IPEndPoint(IPAddress.Parse(ipServer.Text), int.Parse(port.Text));
                    tcpListener = new TcpListener(ip);
                    tcpListener.Start();
                    socketForClient = tcpListener.AcceptSocket();
                    if (socketForClient.Connected)
                    {
                        NetworkStream ns = new NetworkStream(socketForClient);
                        StreamReader sr = new StreamReader(ns);
                        StreamWriter sw = new StreamWriter(ns);
                        string filename = txtFileName.Text;
                        nwkStream = new NetworkStream(socketForClient);
                        stmReader = File.OpenRead(txtFileName.Text);
                        stmWriter = nwkStream;
                        FileInfo flInfo = new FileInfo(txtFileName.Text);
                        //int size = Convert.ToInt32(flInfo.Length);
                        long size = flInfo.Length;
                        byte[] buff = new byte[32 * 2048];
                        int len = 0;
                        long progress = 0;
                        set1("Starting");
                        sw.WriteLine(filename);
                        sw.Flush();
                        while ((len = stmReader.Read(buff, 0, 2048)) != 0)
                        {
                            progress += len;
                            set3(size, progress);
                            set(progress.ToString() + " Byte of " + size + " Byte");
                            stmWriter.Write(buff, 0, len);
                            stmWriter.Flush();
                        }
                        set1("File has sent succesfully!");
                    }
                }
                catch (Exception ex)
                {
    
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    if (socketForClient != null)
                    {
                        socketForClient.Close();
                        nwkStream.Close();
                        stmWriter.Close();
                        stmReader.Close();
                        tcpListener.Stop();
                    }
                }
            }
    
            void set1(string s)
            {
                if (InvokeRequired)
                {
                    object[] pList = { s };
                    lblMessage.BeginInvoke(new UpdateListBoxCallBack(OnUpdateLabel), pList);
                }
                else
                {
                    OnUpdateLabel(s);
                }
            }
    
            private void OnUpdateLabel(String s)
            {
                lblMessage.Text = s;
            }
    
            void set(string s)
            {
                if (InvokeRequired)
                {
                    object[] pList = { s };
                    lblprogressbar.BeginInvoke(new UpdateListBoxCallBack(OnUpdateLabel1), pList);
                }
                else
                {
                    OnUpdateLabel1(s);
                }
            }
    
            private void OnUpdateLabel1(String s)
            {
                lblprogressbar.Text = s;
            }
    
            void set3(long s, long p)
            {
                if (InvokeRequired)
                {
                    object[] pList = { s, p };
                    progressbar.BeginInvoke(new Updatepgdstatus(OnUpdatepgdstatus), pList);
                }
                else
                {
                    OnUpdatepgdstatus(s, p);
                }
            }
    
            private void OnUpdatepgdstatus(long s, long p)
            {
                progressbar.Maximum = Convert.ToInt32(s);
                progressbar.Value = Convert.ToInt32(p);
            }
    
            private void send_Click(object sender, EventArgs e)
            {
                t.Start();
            }
    
            private void sukien2(object sender, EventArgs e)
            {
                port.Clear();
            }
            private void clearPort(object sender, EventArgs e)
            {
                port.Clear();
            }
    
            private void ClearFile(object sender, EventArgs e)
            {
                txtFileName.Clear();
            }
    
            private void disconnect(object sender, EventArgs e)
            {
                label5.Text = "Connect have drop!";
                socketForClient.Close();
                tcpListener.Stop();
            }
    
            private void exit(object sender, EventArgs e)
            {
                Close();
            }
    
            private void clearfilename(object sender, EventArgs e)
            {
                txtFileName.Clear();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Control.CheckForIllegalCrossThreadCalls = false;
            }
        }
    }
    


    Wednesday, December 19, 2012 2:02 AM
  • You should change the scale for your progress bar.

    Measuring in bytes won't work anymore, as Maximum and Value are limited to Int32 data type. So you should determine a new scale from file size. Something like this:

    long size = flInfo.Length;
    int shift = 0;
    if ((size & 0x7F00000000000000) != 0)
        shift = 33;
    else if ((size & 0x00FF000000000000) != 0)
        shift = 25;
    else if ((size & 0x0000FF0000000000) != 0)
        shift = 17;
    else if ((size & 0x000000FF00000000) != 0)
        shift = 9;
    else if ((size & 0x0000000080000000) != 0)
        shift = 1;
    
    ...
    set3(size >> shift, progress >> shift);
    ...



    Wednesday, December 19, 2012 4:33 AM