Forum » Programiranje » 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:
del kode v clientu:
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
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
- spremenilo: scarymovie ()
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:
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?
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c#] shrani text, tabele, slikeOddelek: Programiranje | 1522 (1128) | klemen93 |
» | [C#] Delo z okni - urejanje osebeOddelek: Programiranje | 988 (860) | darkolord |
» | [C#] Client -> Server komunikacija dela, kako je pa z Server -> Client?Oddelek: Programiranje | 1285 (1151) | Mitja Bonča |
» | [Visual C#] zaradi while zanke se ne pokaže oknoOddelek: Programiranje | 1001 (878) | Fresh-Grass |
» | [Naloga][Visul Basic] Program za izračun dimenzij soda...Oddelek: Programiranje | 1772 (1595) | korenje_ver2 |