24/02/07 16:49
giusto in effetti è logico così. la parte del client in + inseriscila nel server.
ma li scrivi tu i codici?
Ps:apri un nuovo topic che mi ci mette 1 min per ricaricare l'intera pagina.
Grazie ancora .. per tue risposte
Mi stai dicendo che il CODICE che ti ho inserito e che mi hai modificato (cortesemente), dovrei metterlo nel Server?
Ovvio! Ma non sono perfetto e inoltre, programmare é sempre difficoltoso.
Grazie ancora..
24/02/07 20:51
P4p3r0g4
no, NON FARLO.
il client ha preso le caratteristihe del server ma le istruzioni da inserire sono molto più semplici del listato di prima.
se vuoi puoi metterle ma ora che ci penso fai molto prima e meglio a riscriverle.
questa prossima settimana sarò un pò impegnato.
cerchiamo di risolvere tutto prima di martedì.
aaa
25/02/07 17:42
Grazie per la tua gentilezza
il client non deve mandare solo down altrimenti non saprai che file è selezionato oppure spezzi tutto.
ragionando.
all'doppioclick sul list 2 avvio la procedura per scaricare.
public sub list2_dblClick()
-- Nel Client ho impostato un Private Sub List2_dblClick()
quindi verrebbe:
Private Sub List2_dblClick
on error resume next
If winsock.State = sckConnected then
Winsock.SendData (list2.List(list2.ListIndex))
End if
End Sub
alchè devo comunicare al server cosa voglio.
per non interferire con le altre operazioni usiamo una nuova winsock (poi mettici tutte le condizioni(se connesso, se non sta giàinviando altre cose ecc))
se usiamo una terza wsk non avremo neanche bisogno di "down" nel client.
Server:
Private Sub wsk3_DataArrival(ByVal bytesTotal As Long)
dim data
wsk3.getdata data
- in che modo apro il file? Che file?
dovrei aprire il (list2.List(list2.ListIndex))
immagino di aprire "c:\file.txt" ma non so quello che contiene il List2.List
dovrei aprire il file all'interno del List2.List, che seleziono
Può essere questo?
Dim c As String
e quindi
c = List2.List(List2.ListIndex)
Open c For Binary #1
é così?
Ricordati però che la directory l'avrai dalla dirbox o dalla list2 non nei dai inviati.
poi risponderà (consiglio sempre l'utilizzo di una quarta per creare meno tetano nei codici)
wsk4.senddata "Down" 'codice d'inizio
doevents
wsk4.senddata filebinario 'trasmissione del file
doevents
wsk4.senddata "Fine"
"wsk4.senddata filebinario" va ripetuta per tutti i frammenti di file che ho visto vuoi creare.
-- Perché mando Down?
-- Non sarebbe meglio aprire il file in binario e mandarlo?
-- Non ho capito la ripetizione per tutti i frammenti di file che vorrei creare..
il client
Codice sorgente
Private Sub wsk4_DataArrival(ByVal bytesTotal As Long)
wsk4.getdata data
if data = "Down"
apri
-- Qui dovrei fare questo?
Open .. For Binary As #1
Elseif data = "Fine"
chiudi
Close #1
Else
scrivi
'cosa dovrei scrivere?
end sub
Grazie ancora per le tua disponibilità
26/02/07 14:46
P4p3r0g4
Postato originariamente da motoboy:
Private Sub download_Click()
On Error Resume Next
If winsock.State = sckConnected Then
winsock.SendData "down"
End If
End Sub
comunque sì. apri scrivi e chiudi li ho lasciati così xkè tu possa gestirteli come ti pare. va be chiudi è chiudi ma ci sono molti modi di scrittura e apertura.
Edit: dovrai scivere i dati che ti vengono dalla winsock!
Ultima modifica effettuata da P4p3r0g4 26/02/07 14:47
aaa
26/02/07 17:21
Grazie per la tua gentilezza
Quindi mi stai dicendo che, devo mandare al doppio click sul List2 del Client la seguente istruzione?
Private Sub List2_dblClick()
on error resume next
If winsock.state = sckConnected Then
winsock.sendData "down" + (List2.List(List2.ListIndex)
ti riferisci a questo?
e quindi non devo mandare.. questa istruzione!
ovvero solo il (list2.List(List2.ListIndex)
giusto?
Private Sub List2_dblClick
on error resume next
If winsock.State = sckConnected then
Winsock.SendData (list2.List(list2.ListIndex))
End if
End Sub
Nel comunicare quindi, al Server cosa voglio,
dicevo, devo mettere il pacchettino, chiamato "down" + il (List2.List(List2.ListIndex)) ovvero il file che ho selezionato, giusto?
Server:
Private Sub wsk3_DataArrival(ByVal bytesTotal As Long)
dim data
wsk3.getdata data
Fin qui se é tutto corretto quello che ti ho scritto, ho capito!
Mandando il "down" + il (List2.List(List2.ListIndex)) ottengo il percorso completo nel Server. Quindi il Server, sà che file voglio?
Se fin tui é tutto corretto!
In che modo apro il file?
Io devo aprire, il (List2.List(List2.ListIndex) o altro? Nell'esempio sottostante, é tutt'ok?
Può essere questo?
Dim c As String
e quindi
c = List2.List(List2.ListIndex)
Open c For Binary #1
Devo aprire appunto, la variabile c? Equivalente a (List2.List(List2.ListIndex) ?
wsk4.senddata "Down" 'codice d'inizio
Perché, stando nel Server, devo mandare il "down" al Client? Devo mandare questo pacchettino?
doevents
wsk4.senddata filebinario 'trasmissione del file
Qual'é il file Binario che devo mandare attraverso il Winsock? Sempre il nostro (List2.List(List2.ListIndex)) ?
doevents
wsk4.senddata "Fine"
Non ho capito la ripetizione per tutti i frammenti del file che dovrò mandare..
il client
Codice sorgente
Private Sub wsk4_DataArrival(ByVal bytesTotal As Long)
wsk4.getdata data
if data = "Down"
Una volta che il Client, riceve, sempre se tutto il procedimento sta bene. In che modo apro il file che ricevo? Nella ricezione, il Server, mi manda appunto il (List2.List(List2.ListIndex)) ?
E l'istruzione di cui mi parlavi, quella di scrivere, a cosa si riferisce?
Elseif data = "Fine"
chiudi
Close #1
Else
end sub
Scusami, ma credo di aver fatto diverse confusioni! Cmq ti riposto il codice vediamo se ho capito tutto..
Client:
Private Sub List2_dblClick()
on error resume next
If winsock.state = sckConnected then
winsock.SendData "down" + (List2.List(List2.ListIndex)
End if
End Sub
fino qui ci siamo? E' così che va?
Nei dati in Arrivo del Server
Server:
winsock.GetData "down"
é il pacchetto che ricevo dal Client, insieme al (List2.List(List2.ListIndex) giusto?
O devo solo inviare il (List2.List(List2.ListIndex) ?
DoEvents
winsock.SendData "down"
come mi hai scritto te, ma in questo caso, direi.. il Server, dovrebbe aprirmi il file in Binario e dovrebbe spedirlo al Client. Perchè mi parlavi di frammetti e di plus costrutti da inserire?
DoEvents
come mi hai scritto te
winsock.SendData filebinario
ma quale file binario? Parliamo sempre del )(List2.List(List2.ListIndex)) ?
winsock.SendData fine
Client, dovrebbe ricevere anche..
Non ci sto capendo + niente!
Grazie ancora per la tua disponibilità
26/02/07 18:11
P4p3r0g4
schematizziamo.
leggi tutto e poi confronta col metodo che ti ho postato prima.
ho in entrambi client e server una list1 che mi contiene tutte le directory della cartella, una list2 in cui sono contenuti tutti i file della cartella. queste list sono sincronizzate. al cambiamento di una camia anche l'altra.
se voglio scaricare un file (sono un client) doppioclicco sull'elenco della list2 (contenente appunto i file) volendo che il server mi invii il file. come reagirà il mio programma?
reagendo al doppioclick sul listato(list2) mi rileva che cosa ho doppiocliccato e lo invia al server.
quindi basterà semplicemente inviare al server un messaggio contenente il nome del file da scaricare (poichè la cartella in cui si trova il file è già aperta dal server(sono sincronizzati))
niente "down" per adesso. semplicemente invio il nome del file.
il nome del file è l'elemento della lista selezionato quindi è list2.list(list2.listindex)
ora seguendo l'invio di dati siamo al server.
la nostra winsocks riceve dei dati.cosa dobbiamo fare?
1) prendiamo i dati(winsock.getdata ..)
2) apriamo il file che dobbiamo inviare al server
aprirò quindi il file che ha come percorso il percorso comune di tutti i file della listbox "list2" che sarà il .path della filelistbox (filelistbox.path) e come nome il pacchetto ricevuto via winsock.
3) invio al client un segnale che sto inviando i dati(ad esmpio "down" o qualsiasi altra cosa..)
4)inizio a inviare il file
5)invio al client un codice di chiusura per dirgli che il file che gli hoinviato è completo.
il client al ricevere dei dati cosa farà
1)vedrà il codice d'apertura e aprirà un file col nome uguale a quello che abbiamop ppena trasmesso al server (list2.list(list2.listindex))
2)guarderà se il codice che gli invio è diverso dal codice di chiusura e se è così lo scrive nel file appena aperto
3)appena identificato il codice di chiusura chiude il file.
il file è finito.
non so più che dirti. è il più elementare possibile .
se non hai ancora capito non so che farci.
aaa