Pisze najprostszą aplikację klient serwer, w c# windows form, na pewno są błędy i nie potrzebne rzeczy, ale chciał bym spytać tylko o jedną z nich. kod zamieszczony poniżej (opierając się na przykładzie znalezionym w sieci). cały problem polega na tym, że chce przy jednym połączeniu klient-serwer wysłać określoną liczbę plików, w tym celu po stronie serwera umiejscowiłem pętle for która na podstawie odebranej liczby w formacie int (zmienna: l_plikow) od klienta wykonuje tyle razy pętle for, aby odebrać każdy z plików. Problem występuje po stronie klienta który owszem, wysyła wpisaną w textboxie po skonwertowaniu na int liczbę określającą ilość plików i nawet je wysyłał gdy for obejmował cały blok try ale zawsze na końcu zwracało wyjątek, że nie może znaleźć ścieżki do pliku mimo, że go wysyłał. Jednak po usunięciu pętli for owego wyjątku nie ma i też wysyła, ale każdy osobno, co znaczy, że to ona generuje ten błąd. Moje pytanie to jak po stronie klienta ustawić pętle for aby tylko raz przy jednym połączeniu poinformować stronę serwera o ilości plików(po prostu raz wysłać liczbe int) po czym wysłać te wszystkie pliki, wskazując element kolejny zaraz po wysłaniu poprzedniego.

Klient

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;


//That code is written by Suman Biswas, Calcutta, India (Email: [email protected],Website: sumanbiswas.xm.com).
//That code is running to transfer small file to client to server. by using and after doing modification any one 
//can able to make a large file transfer application in C#.Net. This is Client code.
namespace FTClientCode
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FileDialog fDg = new OpenFileDialog();
            if (fDg.ShowDialog() == DialogResult.OK)
            {
                FTClientCode.SendFile(fDg.FileName);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label3.Text = FTClientCode.curMsg;
            label1.Text = FTClientCode.ack;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {
            
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (!Int32.TryParse(AmountOfFiles.Text, out iloscPlikow.liczbaPlikow))
            {
                Environment.Exit(1);
            }
        }

        private void PliczbePlikow_Click(object sender, EventArgs e)
        {
            int liczbaPlikow = Convert.ToInt32(AmountOfFiles.Text);
        }

    }
    public class iloscPlikow
    {
        public static int liczbaPlikow = 0;
    }
   
    class FTClientCode
    {
        public static string curMsg = "Bezczynny";
        public static string ack = "Nie otrzymałem potwierdzenia";
        public static void SendFile(string fileName)
        {     
                try
                {
                    IPAddress[] ipAddress = Dns.GetHostAddresses("192.168.1.2");
                    IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
                    Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

                    string filePath = "";
                 for (int i = 1; i <= iloscPlikow.liczbaPlikow; i++)
                 {
                    fileName = fileName.Replace("\\", "/");
                    while (fileName.IndexOf("/") > -1)
                    {
                        filePath += fileName.Substring(0, fileName.IndexOf("/") + 1);
                        fileName = fileName.Substring(fileName.IndexOf("/") + 1);
                    }


                    byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
                    if (fileNameByte.Length > 850 * 1024)
                    {
                        curMsg = "Rozmiar pliku przekracza 850kb, dokonaj retransmisji przy mniejszej wielkosci pliku.";
                        return;
                    }

                    curMsg = "Buferuje ...";
                    System.Threading.Thread.Sleep(2000);
                    byte[] fileData = File.ReadAllBytes(filePath + fileName);
                    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);

                    if (i == 1)
                    {
                        curMsg = "Laczenie z serwerem ...";
                        System.Threading.Thread.Sleep(2000);
                        clientSock.Connect(ipEnd); //tylko raz na jedno polaczenie
                        byte[] lp = BitConverter.GetBytes(iloscPlikow.liczbaPlikow); //konwersja liczby plikow z int do byte[], aby wyslac gniazdem
                        if (BitConverter.IsLittleEndian)
                            Array.Reverse(lp);
                        //byte[] result = lp;

                        clientSock.Send(lp);
                        curMsg = "Wyslano do serwera liczbe plikow";
                        System.Threading.Thread.Sleep(2000);
                    }
///
                        curMsg = "Wysylanie pliku...";
                        System.Threading.Thread.Sleep(2000);
                        clientSock.Send(clientData);

                        byte[] RecData = new byte[4];
                        ack = "Odbierania statusu od serwera ...";
                        System.Threading.Thread.Sleep(2000);
                        clientSock.Receive(RecData);
                        string odSerwera = ASCIIEncoding.ASCII.GetString(RecData);
                        ack = "SERWER MOWI: " + odSerwera;
                        filePath = "";
                        Array.Clear(fileNameByte, 0, fileNameByte.Length);
                        Array.Clear(fileData, 0, fileData.Length);
                        Array.Clear(clientData, 0, clientData.Length);
                        Array.Clear(fileNameLen, 0, fileNameLen.Length);
                        Array.Clear(RecData, 0, RecData.Length);
                    }
                    curMsg = "Rozlaczanie...";
                    System.Threading.Thread.Sleep(2000);
                    clientSock.Close();
                    curMsg = "Plik przesłany pomyślnie.";
                }
                catch (Exception ex)
                {
                    if (ex.Message == "No connection could be made because the target machine actively refused it")
                        curMsg = "Nie udalo sie wyslac pliku poniewaz serwer nie jest uruchomiony.";
                    else
                        curMsg = "Blad podczas wysylania pliku." + ex.Message;
                }
            }
        }
    }

Serwer

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

//That code is written by Suman Biswas, Calcutta, India (Email: [email protected],Website: sumanbiswas.xm.com).
//That code is running to transfer small file to client to server. by using and after doing modification any one 
//can able to make a large file transfer application in C#.Net. This is Server code.

namespace FTServerCode
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            FTServerCode.receivedPath = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (FTServerCode.receivedPath.Length > 0)
                backgroundWorker1.RunWorkerAsync();
            else
                MessageBox.Show("Podaj lokalizacje w kotrej zapisac plik: ");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label5.Text = FTServerCode.receivedPath;
            label3.Text = FTServerCode.curMsg;
        }

        FTServerCode obj = new FTServerCode();
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            
            obj.StartServer();            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fd = new FolderBrowserDialog();
            if (fd.ShowDialog() == DialogResult.OK)
            {
                FTServerCode.receivedPath = fd.SelectedPath;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

    }
    //FILE TRANSFER USING C#.NET SOCKET - SERVER
    class FTServerCode
    {
        IPEndPoint ipEnd;
        Socket sock;
        public FTServerCode()
        {
           ipEnd = new IPEndPoint(IPAddress.Any, 5656);
           sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
           sock.Bind(ipEnd);
        }
        public static string receivedPath;
        public static string curMsg = "Zatrzymane";
        public  void StartServer()
        {
            try
            {
                curMsg = "Uruchamiam...";
                    sock.Listen(100);
                    curMsg = "Uruchomiony, czekam na odbior pliku.";
                    Socket clientSock = sock.Accept();

                  byte[] lp = new byte[sizeof(int)];
                  clientSock.Receive(lp);

                  if (BitConverter.IsLittleEndian) //konwersja byte to int
                      Array.Reverse(lp);
                  int l_plikow = BitConverter.ToInt32(lp, 0);
                  curMsg = "liczba plikow: "+l_plikow;
                  System.Threading.Thread.Sleep(2000);
                 for (int i = 1; i <= l_plikow; i++)
                 {
                      byte[] clientData = new byte[1024 * 5000];

                      int receivedBytesLen = clientSock.Receive(clientData);
                      curMsg = "Odbieram dane...";
                      System.Threading.Thread.Sleep(2000);
                      int fileNameLen = BitConverter.ToInt32(clientData, 0);
                      string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);

                      BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + "/" + fileName, FileMode.Append)); ;
                      bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);

                      curMsg = "Zapisuje plik...";
                      System.Threading.Thread.Sleep(2000);
                      ASCIIEncoding asen = new ASCIIEncoding();
                      clientSock.Send(asen.GetBytes("ACK"));
                      curMsg = "Plik obsłużony";
                      bWrite.Close();
                      Array.Clear(clientData, 0, clientData.Length); //czyszcze tablice
                      receivedBytesLen = 0;
                 }
                    clientSock.Close();
                curMsg = "Serwer zatrzymany";
            }
            catch (Exception ex)
            {
                curMsg = "Blad odbioru pliku." + ex.Message;
            }
        }
    }
}