Avatar billede mbm2016 Nybegynder
09. maj 2010 - 15:45 Der er 16 kommentarer og
1 løsning

C# Net Programmering - Sende screenshots over hjemmenetværk

Hej eksperter,

Jeg sidder her og bakser med et program som skal kunne sende skærm billeder over mit hjemmenetværk.

Jeg har dertil lavet en Img klasse (http://www.magnusbm.dk/SPG/ImgKlasse.html) som kan dele et billede op i flere dele, samt samled et igen. I dette tilfælde handler det om et skærmbillede.

Mit server program (http://www.magnusbm.dk/SPG/ServerCode.html) opretter forskellige tråde hvorpå lytning efter klienter sker. Når en klient har oprettet forbindelse til serveren begynder den at modtage skærmbilledet fra klienten.

Den modtager alle delene fra skærmbilledet hos klienten og samler det derefter med Img.JoinImages().

Hos klienten er denne kode (http://www.magnusbm.dk/SPG/SendCode.html) som deler klientens skærmbillede og sender disse dele til serveren.

Problemet er at forbindelsen hele tiden bliver afbrudt. Og at når forbindelsen så kører(I et meget kort stykke tid), så kommer billed delene i uorden.

Hvis jeg bare sender billed delene én gang, virker det hele fint, men det ser ud som om et while loop ødelægger det?

Jeg har virkelig brug for hjælp

På forhånd tak
Magnus
Avatar billede arne_v Ekspert
09. maj 2010 - 15:59 #1
Hvorfor splitter du billeder paa den maade?

Det maa vaere 10 gange hurtigere at lave billede->byte[]->100 styk byte[]->byte[]->billede!

Men maaske kan du noejes med billede->byte[]->->billede, hvis du altid kalder Receive i en loekke  OG DET SKAL MAN ALTID MED SOCKETS.
Avatar billede arne_v Ekspert
09. maj 2010 - 16:03 #2
Hvorfor koerer client i en uendelige loekke uden nogen form for wait??
Avatar billede arne_v Ekspert
09. maj 2010 - 16:04 #3
Jeg er meget meget skeptisk overfor din brug af float i image metoderne.

Er der nogen af de stoerrlese som der er usikkerhed paa?
Avatar billede mbm2016 Nybegynder
09. maj 2010 - 16:39 #4
Jeg kan godt se at det er dum metode at dele billederne på og det med floats..... Men hvis jeg gør som du siger: billede->byte[]->100 styk byte[]->byte[]->billede! vil der jo stadig være samme problem med at samle dem igen, for ikke at sige connection lost fejlen.

Og jeg forsåt ikke lige hvad du refererer til med hensyn til en uendelig while løkke? er det i ListenForClients() metoden?
Avatar billede arne_v Ekspert
09. maj 2010 - 16:42 #5
Nej - jeg snakker om client (send) koden. Og while løkken i den.
Avatar billede arne_v Ekspert
09. maj 2010 - 16:43 #6
Nej - image split og join metoden har formentligt ikke noget med problemet at gøre.

Det skyldes snarere de agressivt sendende klienter og den manglende while løkke i læsning.
Avatar billede mbm2016 Nybegynder
09. maj 2010 - 19:01 #7
:) Har du et forslag til hvordan jeg så kan sende billederne hurtigt?
Avatar billede janus_007 Nybegynder
09. maj 2010 - 19:42 #8
Hvis scenariet er at forbindelsen hele tiden afbrydes må du arbejde med et kø og dialogsystem.

I dialogsystemet holder du så styr på hvor meget af filen der blev sendt sidste gang og så blot starter din stream derfra igen på clienten, brug Seek :)
Avatar billede arne_v Ekspert
09. maj 2010 - 20:46 #9
Stryg while løkken i client.

Send det hele som et langt byte array.

Kald Receive i while løkke hos modtager.
Avatar billede mbm2016 Nybegynder
13. maj 2010 - 11:39 #10
Jeg har gjort som du sagde men nu kommer problemet igen.... Den er alt for lang tid om at sende mit billede på 625 X 500 pixels. SOm kun fylder 186kb?

SKal jeg dele byte array'et op i små dele som du sagde tidligere, og i såfald hvordan gør jeg det?

PÅ forhånd mange tak.... og tak for din tålmodighed :)
Avatar billede arne_v Ekspert
15. maj 2010 - 01:33 #11
186 KB bør kun tage 0.05-0.20 sekund på LAN.

Kan ud poste koden som den ser ud nu?
Avatar billede mbm2016 Nybegynder
24. maj 2010 - 15:50 #12
Arne du får point :)

Jeg fik det til at virke, med Remoting ;)

Jeg fik snuset mig frem til det via google:
www.socketcoder.com
Avatar billede arne_v Ekspert
24. maj 2010 - 16:03 #13
Umiddelbart synes jeg at remoting virker som meget overhead til formaalet.

Men virker det saa virker det.

PS: Har du laest min artikel om remoting her paa E?

PPS: Svar.
Avatar billede mbm2016 Nybegynder
24. maj 2010 - 16:28 #14
Hej Arne,

Jeg forstår ikke helt begrebet overhead, går ud fra det betyder det samme som overkill ;)

Men hvis jeg bruger almindelig TCP stream forbindelse, så er den mega langsom. Med Remoting kan jeg sende hele billeder helt uden at komprimere dem på nogen måde, og det er ovenikøbet 3 gange hurtigere ;)

Det er såmænd derfor jeg har valgt at gøre det sådan.

Og med hensyn til din artikel, så nej desværre. Men jeg vil sætte mig ned her i løbet af ugen og læse den :)
Avatar billede Syska Mester
24. maj 2010 - 21:36 #15
overhad når man snakker overførelse er splidt båndbredde.

Ligenår man din ISP siger du får 2MBit ... men du kun kan download med 1.9 MBit, så er det fordi der er et overhead, der bruges for at sende/modtage data ...

I dette tilfælde siger Arne_v at der er et stort overhead, kontra at gøre det på den opringelige måde.

Hvordan du så kan måle det er 3x hurtigere, når det andet ikke virker, ved jeg ikke.

mvh
Avatar billede arne_v Ekspert
25. maj 2010 - 03:44 #16
Remoting bruger en socket. Den tilføjer bare lidt overhead i form af meta data omkring de sendte data.

Det bør aldrig kunne være hurtigere end de samme data sendt over samme socket uden meta data.
Avatar billede mbm2016 Nybegynder
30. maj 2010 - 10:45 #17
Det lyder også mærkeligt men det er altså sandt. Og jo det virker hvis jeg ikke deler billedet op. TcpCLient Og TcpListener er noger møg. Jeg prøvede at programmere det i C++ med WinSOck og er du svedt det gik stærkt.

Kan det have noget at gøre med at C# er dårlig managed kode? Eller er min kode bare unsafe?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester