Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ok ma non ho capito come vada specificata la lunghrzza del file da inviare.
il discorso, a mio parere, è stato un po ingarbugliato, o almeno per uno che nn ne sa molto, quindi per chiarire le cose a me e ad eventuali altri utenti
metodo di riseofapocalypse:
dialogo tra client e server -> si salva una variabile che specifica se sta per inviare un file o stringa
e si invia il file:
Dim bytes() as byte = IO.File.ReadAllBytes(filename)
IO.File.WriteAllBytes(filename, bytes)
(ditemi se manca qualcosa)
metodo di theprogrammer:
(ho capito solo che specifica una quantita di bytes e utilizza dei separatori alfanumerici per dichiarare inizio e fine dell'array di bytes)
Ultima modifica effettuata da dedalux il 18/07/2009 alle 12:35
La questione non e' sui dettagli (il "protocollo applicativo" te lo puoi inventare tu ...).
Il discorso importante e' che le due parti in comunicazione devono sapere, in ogni momento, cosa si deve trasmettere e cosa si deve ricevere (e non importa chi e' il server o il client perche', in questo caso, non e' una caratteristica "fisica" del computer ma soltanto una "funzione" della comunicazione che, alternativamente, possono avere tutti e due i sistemi).
Chi inizia a trasmettere deve indicare all'altro sistema, cosa ha intenzione di trasmettere e quanto e' lungo il dato trasmesso ... quindi, ad esempio (ribadisco, ad esempio, ma potresti inventarti tu un altro protocollo ...), chi vuole trasmettere un messaggio di testo, lo fa inviando la stringa
|msg|...messaggio trasmesso...|
e chi riceve rileva i caratteri separatori | per comprendere il messaggio in arrivo.
Se chi vuole trasmettere, vuole inviare un file, invia i dati
|file|1234567|...dati binari file...
in cui non esiste terminatore alla fine perche' hai inviato la lunghezza del file che stai trasmettendo.
Questo e' tutto quello che ti serve. A te convertire il tutto in codice ... se hai ancora dubbi, chiediti anche se, allo stato attuale delle tue conoscenze, questo progetto non sia un po' troppo difficile per te ...
Ultima modifica effettuata da theprogrammer il 18/07/2009 alle 12:45
per la stringa, il punto e che se io inserisco il codice commentato, quello non funziona..
inoltre, come ho gia detto, non so quale sia il comando per analizzare una stringa di quel tipo..
l'unica idea che mi viene in mente è fare uno split con "|" e creare un'insieme di stringhe, se la prima è "file" allora quella seguente la passo come parametro di quantita di byte e la seconda come i bytes da scrivere.
pero ripeto non so come passare questi parametri....
Intanto ti dico che usare un timer per controllare se sono arrivati dei dati dalla rete, non mi pare una buona idea. Se arrivano dei dati, devi utilizzare gli eventi appositi delle classi che utilizzi per riceverli. Ci sono apposta.
E poi, devi tenere presente che la ricezione dei dati dalla rete non segue le regole di una qualsiasi ricezione dati come potrebbe essere quella dalla seriale.
Cio' che trasmetti in un momento, non e' detto che sia ricevuto "completamente" in una sola volta ma e' possibile che venga ricevuto per parti (tutto, nell'ordine corretto ma per parti).
Ad esempio, per capire, la parola "Disconnesso" e' possibile che arrivi in due momenti, prima
Disco
e poi
nnesso
oppure che arrivino dei dati prima e dopo
xxxxDisconnessoyyy
o una qualsiasi combinazione di questi eventi (devi tenere conto delle regole del protocollo TCP ...).
Per scrivere una applicazione "robusta" e funzionante in tutti i casi, devi prevedere una analisi delle stringhe che ricevi impostando una sorta di "macchina a stati finiti".
Ecco perche' la realizzazione di programmi client/server (che siano trojan o no), non e' semplice per chi inizia e prevede, invece, una ottima conoscenza informatica in tutte le sue sfumature ...
Per il timer l'ho usato in quanto ho visto che nella maggior part degli esempi si usava quello =)
ma se ci son odegli esempi sono d'accordo anch'io sia meglio utilizzare quelli, mi documentero..
Che la trasmissione dei dati avvenisse a blocchi lo sapevo, ed neho avuto conferma trasmettendo una stringa molto lunga, accorgendomi che vengono inviati (in condizioni normali) circa 8200 caratteri.
Quanto a prevedere ogni situazione che puo verificarsi penso sia una cosa che si impara, oltre che con il ragionamento, con l'esperienza, e concordo su quanto hai detto.
Ma riguardo a cio che deve fare il server per inviare il file, e non penso(spero) sia la cosa piu complessa: come si fa?
Ultima modifica effettuata da dedalux il 18/07/2009 alle 14:48
Ma riguardo a cio che deve fare il server per inviare il file, e non penso(spero) sia la cosa piu complessa: come si fa?
Mi pare di averti gia' risposto ... andiamo ... si invia il pacchetto di dati che ti ho mostrato, secondo i casi ... (msg o file) ... sempre, come esempio ...