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