View Single Post
Old 17-02-2003, 17:34   #66
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fai così...il numero di byte del messaggio invece di metterlo su un Long lo metti su un Integer (16 bit)...
Se lo metti a 16 bit devi togliere le due conversioni per i byte più alti...

tmp fallo di 3 invece di 4 e sul primo Byte ci metti un byte di controllo...

SendMsg diventerà così:
Codice:
Private Sub SendMsg(cmd As Byte, num As Integer, buf() As Byte) 
Dim tmp(3) As Byte
    Dim v As Variant 
    tmp(1) = cmd
    tmp(2) = (num And &HFF00) / &H100 
    tmp(3) = num And &HFF
Ti devi definire diverse costanti all'interno del programma:

Const FILE_NAME &H04
Indica che ilpacchetto contiene un nome di un file (ad esempio per trasferire un file dall'altra parte e dargli lo stesso nome che dalla parte di chi lo manda)

Const FILE_DATA &H02
Indica che il pacchetto contiene i dati di un file

Const TEXT_DATA &H01
Indica che il pacchetto contiene i dati di un messaggio di testo

Const END_OF_DATA &H08
Questo può servire sia per indicare la fine di un nome di file, dei dati di un file e di un messaggio di testo

Const END_OF_CONNECTION &H80
Questo ti può servire per fare la disconnessione...magari l'altro PC dovrà risponderti con un altro apcchetto di END_OF_CONNECTION

Ad esempio l'invio del file diventerà così :
Codice:
        Do 
            ReadFile f, buffer(1), BYTE_PER_MSG, read, ByVal 0& 
            'Ora richiamo la Sub che invia i dati 
            If read < BYTE_PER_MSG Then
                SendMsg read, buffer,  FILE_DATA Or END_OF_DATA
            Else
                SendMsg read, buffer,  FILE_DATA
            End If
        Loop Until read < BYTE_PER_MSG 
        CloseHandle f
cionci è offline   Rispondi citando il messaggio o parte di esso