Oppure

Loading
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 11:41
Grazie ancora per le tue risposte e la tua gentilezza..

D'accordo, immagino i tuoi impegni!

Ti ricordo, che nel progetto, Client Server, io vorrei fare in questo modo..

Ho inserito un Command Button nel Client, questo manda il pacchettino "down" al Server, il quale, apre in Binario il file e lo manda al Client.

Ti posto il codice! Io seleziono nel List2 del Client, il file e clicco sul command button, questo é il procedimento che vorrei fare.

Ti posto il codice:

Client

Private Sub download_Click()
On Error Resume Next
If winsock.State = sckConnected Then
winsock.SendData "down"
End If
End Sub


Server

Qui non saprei.. ci sto provando, inserisco una variabile, chiamata istr..
e qui il problema, non saprei..
quindi, io ho selezionato un file nel List2 del Client, clicco per scaricarlo..

g As Double, d As Double
Dim DimensioneFile As Long
Dim data As String
Private Const chunk = 8000

dim istr As Integer
winsock.GetData istr
NomeFile As String
NomeFile = List2.List(List2.ListIndex)
If istr = "down" then
Open NomeFile For Binary As "down"
g = (DimensioneFile \ 8000) + 1
Do While Not EOF("down";)

d = i + 1

Data = Input(chunk, "down";)
winsock.SendData Data
DoEvents
Loop

winsock.SendData "FN"

Close #1

If istr = "NO" Then

Winsock.SendData "NO"

If istr = "finito" Then

Winsock.SendData "FI"

End Select



Client

dim Data As String
winsock.GetData Data
If Data = "FN" then
Close #1
End If

ci ho provato! Spero..

Grazie ancora..
25/02/07 15:07
P4p3r0g4
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()

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.
wsk3.senddata (list2.list(list2.listindex))
end sub


il server guarderà questa wsk

Private Sub wsk3_DataArrival(ByVal bytesTotal As Long)

rilevi il file
wsk3.getdata data

apri il file come ti pare. 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.


il client
Private Sub wsk4_DataArrival(ByVal bytesTotal As Long)
wsk4.getdata data
if data = "Down"

apri
Elseif data = "Fine"

chiudi
Else

scrivi
end sub
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