Oppure

Loading
17/07/09 18:56
dedalux
Salve a tutti,
come detto in precedenza, sto cercando di ambientarmi nell'ambiente delle socket creando una piu o meno semplice applicazione che faccia uso di TCPClient e Listener.

Per ora il mio client si connette al server, invia tutti i messaggi con relativa risposta da parte del server ecc..

Ora mi piacerebbe molto sapere come si fa ad inviare un file, ho pensato ad una cosa semplice, come un'immagine.
Sapendo che va trasformata l'immagine in un array di byte che dopo andranno inviati, ricevuti e riscritti in un file, ma nn come fare esattamente, ho cercato un po, e ahime ne sono uscito confuso, poiche ho letto qua e la che è una cosa complessa, e che spesso produce risultati negativi come file corrotti, spezzettati e/o incolpeti.

E' una cosa semplice o è ancora troppo presto?
Avreste qualche delucidazione da darmi?

Thx a tutti!
aaa
17/07/09 19:09
riseofapocalypse
Per leggere i Bytes del File usi:
Dim bytes() As Byte = IO.File.ReadAllBytes(filename)

E poi li invii col solito metodo di invio! :)
Invece quando devi ricevere, dopo aver salvato in un Array i Bytes ricevuti, puoi fare così:
IO.File.WriteAllBytes(filename, bytes)

:k:
aaa
17/07/09 19:16
dedalux
Giusto scusami ho dimenticato una cosa: ovviamente client e server scambiano stringhe e files, ho letto in giro che x cosa che viene inviata serve un nuovo socket, ossia se invio una stringa utilizzo un determinato client e relativo server, per inviare un file devo crearne 2 di nuovi e utilizzare quelli...
E' vero?
aaa
17/07/09 19:26
riseofapocalypse
Assolutamente no! Devi solamente gestire le richeste in modo che Client e Server capiscano cosa si stanno scambiando, ad esempio se devi inviare un file da Client a Server fai così:
Client invia "file"
Server invia "OK"
Client invia Bytes del File
Server invia "OK" e salva il file

Invece per i messaggi puoi fare così:
Client invia "msg"
Server invia "OK"
Client invia Bytes del messaggio
Server invia "OK" e stampa il messaggio

Io di solito faccio qualcosa del genere! :k:
aaa
17/07/09 19:39
dedalux
Quindi per fargli capire cosa invio basta che glielo dico prima?

Ma tipo quando il server riceve "file" che fa?
Io farei che lo salva in una variabile e ricevuti i byte della stringa/file, in base al valore di questa variabile esegue il WriteAllBytes o la modifica della textbox...

C'è un altro modo?
Ultima modifica effettuata da dedalux 17/07/09 19:43
aaa
17/07/09 19:43
riseofapocalypse
Hai capito perfettamente cosa intendo! E' un modo semplice e veloce di distinguere i dati :k:

Non ho capito cosa intendi tu però :rotfl: se il Client invia "file", il Server deve rispondere "OK" oppure "KO", in modo che se ci sono dei problemi si possa fermare :D
Ultima modifica effettuata da riseofapocalypse 17/07/09 19:45
aaa
17/07/09 19:51
theprogrammer
Attenzione a questo modo di operare ... devi anche indicare la lunghezza del file (il numero di byte inviati) prima di inviarli, altrimenti potresti avere problemi durante la ricezione.
aaa
17/07/09 19:54
riseofapocalypse
Giusto, mi sono dimenticato di specificarlo :rotfl:
aaa