» »

prenos datotek server-client

prenos datotek server-client

scarymovie ::

Imam vprasanje glede prenosa datotek med serverjem in clientom. Naredil sem 2 program server in client. Na serverju si zberem datoteke in pošlem njihove naslove clientu. Na clientu zberem naslov datoteke in kliknem na gumb za prejemanje. Težava nastane pri prejemanju, ker server ne ve če mu je bil poslan naslov od datoteke.

del kode v serverju:
private void server()
        {
            TcpListener tcpListner = new TcpListener(IPAddress.Any, 1234);
            tcpListner.Start();

            try
            {
                while (true)
                {
                    odjemalec = tcpListner.AcceptSocket();
                    if (odjemalec.Connected)
                    {
                        Thread tc = new Thread(new sendfile));
                        tc.Start();
                    }
                }
            }
private void sendfile()
        {
            ns = new NetworkStream(odjemalec);
            StreamWriter streamWriter = new StreamWriter(ns);
            StreamReader streamReader = new StreamReader(ns);
            string datoteka = streamReader.ReadLine();
            
            try
            {
                int rdby = 0;
                int len;
                byte[] buffed = new byte[1024];
                FileStream fin = new FileStream(datoteka, FileMode.Open, FileAccess.Read);

                long total = fin.Length;
                // pošlji samo dolžino datoteke
                streamWriter.WriteLine(total);
                streamWriter.Flush();

                // pošlji datoteko po manjših koščkih
                while (rdby < total && ns.CanWrite)
                {
                    len = fin.Read(buffed, 0, buffed.Length);
                    ns.Write(buffed, 0, len);
                    rdby = rdby + len;
                }
                fin.Close(); MessageBox.Show("asfjhadkfdk");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }

        }


del kode v clientu:
 private void button_Prenos(object sender, EventArgs e)
        {
            Thread tc = new Thread(new ThreadStart(prenos));
            tc.Start();
        }
private void prenos()
        {
            // prejmi datoteko iz datoteke
            NetworkStream networkStream = odjemalec.GetStream();
            StreamReader streamReader = new StreamReader(networkStream);
            StreamWriter streamWriter = new StreamWriter(networkStream);
            
            streamWriter.WriteLine(naslov[stev]);
            long size = Convert.ToInt32(streamReader.ReadLine());
            FileStream fout = new FileStream(Path.GetFileName(naslov[stev]), FileMode.Create, FileAccess.Write);

            long rdby = 0;
            int len;

            // po koščkih prebiraj vsebino datoteke in jo zapisuj v datoteko na disku
            while (rdby < size)
            {
                byte[] buffer = new byte[1024];

                len = networkStream.Read(buffer, 0, buffer.Length);
                fout.Write(buffer, 0, len);
                rdby = rdby + len;
            }
            fout.Close();
            fout.Close();
            streamReader.Close();
            networkStream.Close();
        }


Mislim da je težava v tem, da funkcijo sendfile vklopim takoj ko se odjemalec poveže na server. Nato, ko pa dam v clientu prejemanje pa prenos ne gre.
Mi lahko date kakšen nasvet prosim.
hvala,
LP

misek ::

Izmisli si neki zelo enostaven protokol, kjer se client in server med sabo pogovarjata. Client nato izrecno zahteva prenos neke zahteve. Na ta način imaš delovanje pod nadzorom.

scarymovie ::

hmm, sem nekaj še poskušal vendar ne gre, zadeva mi ni čisto jasna. Če pogledam ta del kode iz serverja:
while (true)
              {
                    odjemalec = tcpListner.AcceptSocket();
                    if (odjemalec.Connected)
                    {
                        Thread tc = new Thread(new sendfile));
                        tc.Start();
                    }
                } 


to v bistvo dela ves čas in ko se odjemalec poveže se zažene funkcija sendfile. V send file pa imam zahtevo za clienta naj pošle naslov datoteke (datoteka=streamReader.ReadLine()) in ta del bi po moje moral čakat, dokler ne stistnem gumba prenos na clientu. Vendar ko stisnem gumb na clientu pa client pošle naslov in spet čaka če bo server sprejel. Vendar server ne sprejme nič. Ni mi jasno zakaj ta stvar ne deluje, ali si jo pa napačno razlagam?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c#] shrani text, tabele, slike

Oddelek: Programiranje
251522 (1128) klemen93
»

[C#] Delo z okni - urejanje osebe

Oddelek: Programiranje
8988 (860) darkolord
»

[C#] Client -> Server komunikacija dela, kako je pa z Server -> Client?

Oddelek: Programiranje
51285 (1151) Mitja Bonča
»

[Visual C#] zaradi while zanke se ne pokaže okno

Oddelek: Programiranje
81001 (878) Fresh-Grass
»

[Naloga][Visul Basic] Program za izračun dimenzij soda...

Oddelek: Programiranje
101772 (1595) korenje_ver2

Več podobnih tem