Oppure

Loading
11/07/16 18:09
Elix01
Salve a tutti, mi presento: sono Elia, un ragazzo di 15 anni che programma da relativamente poco in vb.Net.
Andiamo subito al punto: ho creato un piccolo progetto per la comunicazione attraverso socket.
Mi stavo chiedendo se insieme alle stringhe è possibile inviare immagini, come ad esempio uno screenshot.
E' possibile? Sono ore che cerco online ma ancora non ho trovato nulla.. Anche solo qualche link potrebbe essere d'aiuto.

Mi spiego meglio: inviare un file è relativamente semplice, ma il vorrei creare uno streaming webcam/screen, pertanto deve essere veloce la trasmissione dati e deve specificare di che tipo è, ad esempio: "webcam|" + immagine webcam.
Ultima modifica effettuata da Elix01 11/07/16 18:19
aaa
11/07/16 21:22
TheDarkJuster
Una stringa è un insieme particolare di byte, perché 0 compare solo una volta: aka fine!

Con i socket puoi inviare non solo stringhe: ogni cosa!

Tuttavia ogni protocollo ha i suoi pregi e i suoi difetti.

Tu stai usando tcp/ip, che è lento ma da la sicurezza che i dati ricevuti siano corretti e che non vengano persi.

Quello che ti serve è una comunicazione udp, che è l'esatto contrario.... e ovviamente un protocollo di trasmissione dati
aaa
11/07/16 21:56
Thejuster
Aggiungo in oltre, di studiarti un pò la parte che riguarda lo stream.

Normalmente per ottenere una stringa tu fai qualcosa del tipo


byte[] data = Encoding.ASCII.GetBytes(stringa_ricevuta);



ottieni un array di bytes che formano la stringa.


1) Ottenere i bytes di un file

Nel tuo caso, devi prima leggere un file di testo ed ottenerne i relativi bytes


FileStream fs =File.OpenRead(Directory_del_file);
byte[] bytes = new byte[fs.Length];
 fs.Read(bytes, 0, Convert.ToInt32(fs.Length));





Una volta che hai i bytes puoi inviarli tramite socket al client.

successivamente, il client prende i bytes ricevuti e li converte in file.



// Apro il file per la scrittura
System.IO.FileStream FileStream =    new System.IO.FileStream(Destionazione_File, System.IO.FileMode.Create,                                           System.IO.FileAccess.Write);

//Scrivi dei blocchi di bytes in questo stream
//utilizzando l'array dei bytes ricavato dal server
FileStream.Write(bytes , 0, bytes.Length);

// Chido lo stream
FileStream.Close();



A questo punto ti ritrovi il file bello pronto ed identico a quello originale.
Nota bene.
Devi inviare i bytes e non il contenuto del file.
C'è una bella differenza tra il contenuto e la struttura di un file.
Basta un niente per danneggiare il file, ed una volta scritto risulterebbe danneggiato.
Per questo motivo serve leggere e scrivere in bytes.
Così sei sicuro che non ti perdi nemmeno un numero o che si danneggi il dump.

Questo è il sistema migliore per ottenere quello che stai cercando.

mire.forumfree.it/ - Mire Engine
C# UI Designer
13/07/16 7:41
Elix01
Teoricamente, se volessi inviare uno screenshot, posso salvarlo in un temporaneo memorystream e inviarlo? Perché vorrei fare, come mi pare di aver gia scritto nel primo post, uno "streaming". Di conseguenza, devo inviare più immagini su un solo socket. Se ad esempio, dal mio server richiedono sia un immagine del desktop, sia un immagine della webcam, il server puo certamente inviarle in questo modo, ma come fa il client a distinguere i byte?
aaa
13/07/16 9:21
TheDarkJuster
Ti serve studiare un protocollo come ti dicevo.....

Fai conto che la comunicazione sia:
INIZIO FRAME (45byte)
frame
FINE FRAME
i 45 byte successivi al marcatore di inizio frame SONO i byte di un frame (immagine di un video).

comunque scegli un formato di dati in cui i dati non dipendono dal resto delle informazioni: come ti ho già detto UDP potrebbe perdere un intero pacchetto, quindi DEVI evitare di compromettere anche ciò che è stato inviato correttamente.
aaa