
Remplacer ReceiveNetworkFile
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
Top secret c'est un grand mot.....mais c'est pour mon boulot 

Re: Remplacer ReceiveNetworkFile
Tu pourras peut-être faire un "dérivatif" ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
Oui , oui, oui.....pas de probleme 
Heuuuu ! c'est quoi un "déservatif" heu !!! dérivatif
Justement, j'aurais bien aimé vous montrer, ce que KCC y fait ..................avec les codes des autres
Surtout que pour ce coup la, en fait, j'aurais fait que reunir les codes des autres
Parce que ce programme grace à vous, il a drolement de la gueule
J'en ai fait quelques un que je trouve joli, mais celui la a chaque fois que je le démarre, je trouve que j'ai eu une bonne idée, et que les copains ont eu drolement du talent, une sacré equipe quoi
En fin de compte, ce qui est cool, c'est le graphisme.....alors si un derivatif, c'est le meme programme mais pas complet, style une demo qui montre tous les effets "extrordinaires" (Enfin...c'est pas du NETMAESTRO..mais bon c'est un code qui lui arrive a la chaussure, puisque y'a une partie qui est de lui
)
D'un autre coté, ça devrait pas vous epater tant que ça, puisque c'est vous qui m'apprenez a faire ce que je fais, et donc vous savez le faire.
Mais moi.....c'est comme quand on pete...parfois on s'epate tout seul
Mais si ça t'interesse dizilemele....je vous doit bien ça, puisque je vous doit tout

Heuuuu ! c'est quoi un "déservatif" heu !!! dérivatif

Justement, j'aurais bien aimé vous montrer, ce que KCC y fait ..................avec les codes des autres

Surtout que pour ce coup la, en fait, j'aurais fait que reunir les codes des autres

Parce que ce programme grace à vous, il a drolement de la gueule
J'en ai fait quelques un que je trouve joli, mais celui la a chaque fois que je le démarre, je trouve que j'ai eu une bonne idée, et que les copains ont eu drolement du talent, une sacré equipe quoi

En fin de compte, ce qui est cool, c'est le graphisme.....alors si un derivatif, c'est le meme programme mais pas complet, style une demo qui montre tous les effets "extrordinaires" (Enfin...c'est pas du NETMAESTRO..mais bon c'est un code qui lui arrive a la chaussure, puisque y'a une partie qui est de lui

D'un autre coté, ça devrait pas vous epater tant que ça, puisque c'est vous qui m'apprenez a faire ce que je fais, et donc vous savez le faire.
Mais moi.....c'est comme quand on pete...parfois on s'epate tout seul

Mais si ça t'interesse dizilemele....je vous doit bien ça, puisque je vous doit tout

Re: Remplacer ReceiveNetworkFile
Definition dérivatif
en gros que tu fasse un dériver ou carrément nous montrer ton projet qui d'après toi "déchire sa mère"
@++
en gros que tu fasse un dériver ou carrément nous montrer ton projet qui d'après toi "déchire sa mère"


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
Dechire sa mere, dechire sa mere ....j'ai pas dit çavenom a écrit :Definition dérivatif
en gros que tu fasse un dériver ou carrément nous montrer ton projet qui d'après toi "déchire sa mère"![]()
![]()

Moi, je le trouve beau....et en plus grace aux spirales de TYPHOON et SOLDAT quand tu le regarde, et ben tu le regarde, tu le regarde, tu le regarde encore et mon entreprise a fermé et je le regardais encore

Voila, mais commencer pas a faire monter la mayonnaise .......sinon vous risquez d'etre déçu

Si j'arrive a le terminer, car ça fait une semaine que j'arrette pas de dire que je vais le finir, mais grace a CLS j'y crois à nouveau, c'est promis....je ferais une demo graphique rien que pour vous, car comme dirait la pub...vous le valez bien

C'est mon chef qui va etre content

Re: Remplacer ReceiveNetworkFile
je sais bien que tu n'a pas dit cela
@++

@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
venom a écrit :je sais bien que tu n'a pas dit cela

En tout cas...C'est drolement dur de se faire un nom dans l'informatique.....

Moi j'ai pas encore de prénom

Ahhh bon !!!!Un geek est un homme qui croit que 1 kilomètre est égale a 1024 mètre

Bah un kilometre c'est quand meme pas 512 ou 2048 metres, que je sache !!!

Re: Remplacer ReceiveNetworkFile
Salut,
voilà le code mis à jour : j'y ai ajouté une barre de progression ainsi que la vérification de l'intégrité reçu (en gros en compare le MD5 du fichier local avec celui du fichier distant).
A noté que ce bout de code est valable pour un seul utilisateur simultané (ce qui ne fait pas beaucoup...). Il est tout à fait possible (et assez facile) de le rendre compatible multi-utilisateur (histoire de pouvoir transféré plusieurs fichiers simultanément.
De même il est possible de vérifier l'intégrité de chaque bloc de données envoyés ou de demander une confirmation avant l'envoi, bref le code reste ouvert
voilà le code mis à jour : j'y ai ajouté une barre de progression ainsi que la vérification de l'intégrité reçu (en gros en compare le MD5 du fichier local avec celui du fichier distant).
A noté que ce bout de code est valable pour un seul utilisateur simultané (ce qui ne fait pas beaucoup...). Il est tout à fait possible (et assez facile) de le rendre compatible multi-utilisateur (histoire de pouvoir transféré plusieurs fichiers simultanément.
De même il est possible de vérifier l'intégrité de chaque bloc de données envoyés ou de demander une confirmation avant l'envoi, bref le code reste ouvert

Code : Tout sélectionner
; ________________________________________________________
;
; Fonctions d'envoi et de réception d'un fichier
;
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Auteur : Cls
; Version : Décembre 2009
; Compatibilité : PB 4.40
; Structure de l'entête
Structure NETFILE_HEADER
type.l
no_packet.l
offset_file.q
flags.l
data_size.l
EndStructure
; Configuration
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
#Destination_Directory = "C:\"
#READ_BUFFER_SIZE = 51200 ; Taille du buffer de lecture
#HEADER_SIZE = SizeOf(NETFILE_HEADER) ; Taille de l'entête
#PACKET_SIZE = #HEADER_SIZE + #READ_BUFFER_SIZE ; Taille totale d'un packet de données
; Type de packet de données
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
#PACKET_TYPE_FILE_NAME = $10110001
#PACKET_TYPE_FILE_CONFIRM = $10110011
#PACKET_TYPE_TRANSFERT_FILE = $10110111
#PACKET_TYPE_MD5 = $10111111
; Code d'erreurs
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
#NETFILE_ERROR_BAD_CONNEXION = $00000010
#NETFILE_ERROR_FILE_NOT_FOUND = $00000100
#NETFILE_ERROR_FILE_NOT_READABLE = $00001000
#NETFILE_ERROR_FILE_NOT_WRITABLE = $00010000
#INTERNAL_ERROR = $FFFF
; Création d'un packet de données
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure PacketCreate()
*packet = AllocateMemory(#PACKET_SIZE)
If *packet = 0
ProcedureReturn #INTERNAL_ERROR
EndIf
ProcedureReturn *packet
EndProcedure
; Création de l'entête d'un packet de données
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure PacketCreateHeader(*packet, type.l, numero.q = 0, place_fichier.q = 0, taille_donnees.l = 0, drapeaux.l = 0)
*p_packet = *packet
PokeL(*p_packet, type) : *p_packet + SizeOf(Long)
PokeL(*p_packet, numero) : *p_packet + SizeOf(Long)
PokeQ(*p_packet, place_fichier) : *p_packet + SizeOf(Quad)
PokeL(*p_packet, drapeaux) : *p_packet + SizeOf(Long)
PokeL(*p_packet, taille_donnees) : *p_packet + SizeOf(Long)
ProcedureReturn *packet
EndProcedure
; Ajout des données à un packet
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure PacketAddData(*packet, *donnees.l, taille.l)
*p_packet = *packet
*p_packet + SizeOf(NETFILE_HEADER)
CopyMemory(*donnees, *p_packet, taille)
ProcedureReturn *packet
EndProcedure
; Ajout de données de type chaine
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure PacketAddString(*packet, String.s, taille.l)
*p_packet = *packet
*p_packet + SizeOf(NETFILE_HEADER)
PokeL(*p_packet, taille) : *p_packet + SizeOf(Long)
PokeS(*p_packet, String, taille) : *p_packet + taille
ProcedureReturn *packet
EndProcedure
; Procédure de DEBUG d'un paquet
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure PacketDebug(*packet, taille.l)
*header.NETFILE_HEADER = *packet
Debug "No Packet : " + Str(*header\no_packet)
Debug "Offset : " + Str(*header\offset_file)
Debug "Flags : " + Str(*header\flags)
Debug "DATA size : " + Str(*header\data_size)
*packet + SizeOf(NETFILE_HEADER)
str.s
For x = 0 To taille - SizeOf(NETFILE_HEADER)
str + Chr(PeekC(*packet + x))
Next
Debug str
EndProcedure
; Message d'erreur
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure Error(msg.s, type.l = 1)
Select type
Case 1
MessageRequester("Erreur", msg, #MB_ICONINFORMATION)
Default
Debug msg
EndSelect
EndProcedure
; Affichage sur l'IHM
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure Message(msg.s)
Global log
msg = FormatDate("%dd/%mm %hh:%ii:%ss", Date()) + " - " + msg
AddGadgetItem(log, -1, msg)
EndProcedure
; Procédure d'envoi d'un fichier
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; @param Connexion l'identifiant de la connexion
; @param Fichier le fichier à envoyer
; @param Fichier_destination le nom du fichier qui sera cré en local
; @param Loopback une fonction permettant de connaitre l'état du transfert (optionel)
; @return 1 si le fichier est envoyé correctement
Procedure SendNetworkFileEx(Connexion.l, Fichier.s, Fichier_destination.s = "", *Loopback.l = #Null)
; Contrôles
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Vérifie la connexion
If Connexion = 0
ProcedureReturn #NETFILE_ERROR_BAD_CONNEXION
EndIf
; Vérifie le fichier
total_filesize.q = FileSize(Fichier)
If total_filesize < 0
ProcedureReturn #NETFILE_ERROR_FILE_NOT_FOUND
EndIf
; Création d'un buffer de lecture
*read_buffer = AllocateMemory(#READ_BUFFER_SIZE)
If *read_buffer = 0
ProcedureReturn #INTERNAL_ERROR
EndIf
; Création d'un buffer pour l'envoi des données (packet)
*packet = PacketCreate()
; Transfert
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Handle vers le fichier
hFile.l = ReadFile(#PB_Any, Fichier)
If hFile = 0
ProcedureReturn #NETFILE_ERROR_FILE_NOT_READABLE
EndIf
; Lit le fichier par bloc
p_locate_file.q = 0
numero_packet.l = 0
data_send.q = 0
While Eof(hFile) = 0
; Lit un bloc de READ_BUFFER
read_length = ReadData(hFile, *read_buffer, #READ_BUFFER_SIZE)
;Debug Str(read_length) + " " + Str(p_locate_file)
; Création d'un paquet de données
If read_length = #READ_BUFFER_SIZE
; Packet "normal"
*packet = PacketCreateHeader(*packet, #PACKET_TYPE_TRANSFERT_FILE, numero_packet, p_locate_file, read_length)
Else
; Dernier packet de données
*packet = PacketCreateHeader(*packet, #PACKET_TYPE_TRANSFERT_FILE, numero_packet, p_locate_file, read_length, 1)
EndIf
; Ajout des données à envoyer
*packet = PacketAddData(*packet, *read_buffer, read_length)
; Envoi du packet sur le réseau
SendNetworkData(Connexion, *packet, #PACKET_SIZE)
;PacketDebug(*packet, read_length + #HEADER_SIZE)
data_send + read_length
; Appel la loopback
If *Loopback <> #Null
CallFunctionFast(*Loopback)
EndIf
; Déplace le pointeur de lecture
p_locate_file + read_length
FileSeek(hFile, p_locate_file)
; Packet suivant
numero_packet + 1
; Delay
Delay(1)
Wend
; Libération des mémoires
CloseFile(hFile)
FreeMemory(*read_buffer)
FreeMemory(*packet)
ProcedureReturn #True
EndProcedure
; Procédure de reception d'un fichier
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; @param Connexion l'identifiant de la connexion Client
; @param AutoriserNomPersonnalise A true, permet au client de spécifier le nom du fichier
; @param Loopback une fonction permettant de connaitre l'état du transfert (optionel)
; @return 1 si le fichier est recu correctement
Procedure ReceiveNetworkFileEx(Connexion, Fichier.s, *packet.l, length.l, *Loopback.l = #Null)
; Contrôles
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Vérifie la connexion
If Connexion = 0
ProcedureReturn #NETFILE_ERROR_BAD_CONNEXION
EndIf
; Définition du nom du fichier
Fichier_destination.s = Fichier
; Création d'un buffer d'écriture réception
*write_buffer = AllocateMemory(#PACKET_SIZE)
If *write_buffer = 0
ProcedureReturn #INTERNAL_ERROR
EndIf
; Création d'un buffer contenant le packet entier
*packet_received = PacketCreate()
; Recompose le packet de données
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
CopyMemory(*packet, *packet_received, length)
; Ecriture sur le disque
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; A ce moment *packet contient le packet de données entier
;PacketDebug(*packet_received, #PACKET_SIZE)
; On le réaassemble sur notre disque
hWriteFile = OpenFile(#PB_Any, #Destination_Directory + Fichier_destination)
If hWriteFile = 0
ProcedureReturn #NETFILE_ERROR_FILE_NOT_WRITABLE
EndIf
; Entête
*header.NETFILE_HEADER = *packet_received
; Données
*p_packet = *packet_received
*p_packet + SizeOf(NETFILE_HEADER)
; Déplace le pointeur d'écriture et écrit les données
; Si le pointeur dépasse la fin du fichier, on rempli de vide
If *header\offset_file > Lof(hWriteFile)
FileSeek(hWriteFile, Lof(hWriteFile))
taille_to_fill.l = *header\offset_file - Lof(hWriteFile)
*filler = AllocateMemory(taille_to_fill)
FillMemory(*filler, taille_to_fill)
WriteData(hWriteFile, *filler, taille_to_fill)
EndIf
FileSeek(hWriteFile, *header\offset_file)
WriteData(hWriteFile, *p_packet, *header\data_size)
; Libération des mémoires
CloseFile(hWriteFile)
FreeMemory(*write_buffer)
FreeMemory(*packet_received)
; Appel de la CallBack
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
If *Loopback <> #Null
CallFunctionFast(*Loopback)
EndIf
EndProcedure
; Sélection et envoi d'un fichier
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure SelectAndSendFile(value.l)
Global client
file.s = OpenFileRequester("", "", "", 1)
If file
; Modification du nom du fichier
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
FileName.s = GetFilePart(file)
*packet = PacketCreate()
*packet = PacketCreateHeader(*packet, #PACKET_TYPE_FILE_NAME, 0, FileSize(file), Len(FileName))
*packet = PacketAddString(*packet, FileName, Len(FileName))
SendNetworkData(client, *packet, #PACKET_SIZE)
; Envoi des données au serveur
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ret = SendNetworkFileEx(client, file)
If ret <> 1
Error(Str(ret))
Else
; Confirmation
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
*packet = PacketCreate()
*packet = PacketCreateHeader(*packet, #PACKET_TYPE_FILE_CONFIRM)
SendNetworkData(client, *packet, #PACKET_SIZE)
; Vérification de l'intégrité du fichier
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
md5.s = MD5FileFingerprint(file)
*packet = PacketCreate()
*packet = PacketCreateHeader(*packet, #PACKET_TYPE_MD5)
*packet = PacketAddString(*packet, md5, Len(md5))
SendNetworkData(client, *packet, #PACKET_SIZE)
EndIf
EndIf
EndProcedure
; Met à jour la barre de progression
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure RefreshProgressBar(Transfert.q, Total.q)
Global progress, progress_text
pourcentage.f = Transfert / Total * 100
SetGadgetText(progress_text, Str(pourcentage) + " %")
SetGadgetState(progress, pourcentage)
EndProcedure
Procedure CheckMd5FileFingerPrint(md5.s, file.s)
If MD5FileFingerprint(file) = md5
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
; Gère les évènements du serveur
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Procedure ManageNetworkEvent(clientId)
Static Fichier_Destination.s ; Fichier de destination
Static Fichier_Taille.q ; Taille totale du fichier
Static Fichier_Transfere.q ; Taille reçue
*packet = PacketCreate()
length = ReceiveNetworkData(clientId, *packet, #PACKET_SIZE)
*header.NETFILE_HEADER = *packet
Select *header\type
Case #PACKET_TYPE_FILE_NAME
taille_nom_fichier.l = PeekL(*packet + SizeOf(NETFILE_HEADER))
Fichier_Destination = PeekS(*packet + SizeOf(NETFILE_HEADER) + SizeOf(Long), taille_nom_fichier)
Fichier_Taille = *header\offset_file ; On utilise ce champ pour envoyer la taille du fichier
Fichier_Transfere = 0
Message("Changement du nom du fichier : " + Fichier_Destination + " (" + Str(Fichier_Taille) + " octets)")
Case #PACKET_TYPE_TRANSFERT_FILE
Message("Données reçues : " + Str(*header\data_size) + " octets")
ReceiveNetworkFileEx(clientId, Fichier_Destination, *packet, length)
Fichier_Transfere + *header\data_size
RefreshProgressBar(Fichier_Transfere, Fichier_Taille)
Case #PACKET_TYPE_FILE_CONFIRM
Message("Transfert du fichier terminé !")
Case #PACKET_TYPE_MD5
taille_md5.l = PeekL(*packet + SizeOf(NETFILE_HEADER))
MD5.s = PeekS(*packet + SizeOf(NETFILE_HEADER) + SizeOf(Long), taille_md5)
If CheckMd5FileFingerPrint(MD5, #Destination_Directory + Fichier_Destination)
Message("L'empreinte MD5 du fichier est correcte. Le fichier a été transféré correctement.")
Else
Message("Le fichier est corrompu ! :(")
EndIf
Default
Debug "Packet inconnu"
EndSelect
EndProcedure
;- Début du programe de test
If InitNetwork() = 0
Error("Pas de réseau")
End
EndIf
;file.s = OpenFileRequester("", "", "", 1)
;SendNetworkFileEx(1, file)
; Ouverture d'un écran
#height = 350 : #width = 600
Global window = OpenWindow(#PB_Any, 0, 0, #width, #height, "Test SendNetworkFile / ReceiveNetworkFile par Cls", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
Global log = ListViewGadget(#PB_Any, 10, 10, #width - 20, #height - 75)
Global progress = ProgressBarGadget(#PB_Any, 10, #height - 60, #width - 20, 10, 0, 100, #PB_ProgressBar_Smooth)
Global progress_text = TextGadget(#PB_Any, #width - 40, #height - 40, 30, 20, "0 %")
Global send = ButtonGadget(#PB_Any, 10, #height - 40, 150, 30, "Envoyer un fichier...")
; Création d'un serveur
#port = 5000
Global server = CreateNetworkServer(#PB_Any, #port)
If server : Message("Serveur créé sur le port " + Str(#port)) : EndIf
; Création d'un client
Global client = OpenNetworkConnection("127.0.0.1", #port)
; Boucle des évènements
Quit.l
Repeat
;- Evènement fenêtre
wEvent = WaitWindowEvent(1)
Select wEvent
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case send
CreateThread(@SelectAndSendFile(), 1)
EndSelect
EndSelect
;- Evènement réseau Serveur
sEvent = NetworkServerEvent()
clientId = EventClient()
Select sEvent
Case #PB_NetworkEvent_Connect
Message("Client connecté : " + IPString(GetClientIP(clientId)) + ":" + Str(GetClientPort(clientId)))
Case #PB_NetworkEvent_Data
ManageNetworkEvent(clientId)
Case #PB_NetworkEvent_Disconnect
Message("Client déconnecté : " + IPString(GetClientIP(clientId)) + ":" + Str(GetClientPort(clientId)))
EndSelect
;- Evènement réseau Client
tEvent = NetworkClientEvent(server)
Select tEvent
Case #PB_NetworkEvent_Data
EndSelect
Until Quit = 1
Re: Remplacer ReceiveNetworkFile
Je me réponds à moi - même !
Je viens de faire quelques tests, il apparait que sur de gros fichiers, il y ait un pourcentage d'erreur assez élevé. Je vais donc mettre en place un système de vérification des paquets de données et de retransmission, en cas de problème. Ça va compliquer de manière significative mais bon...

Je viens de faire quelques tests, il apparait que sur de gros fichiers, il y ait un pourcentage d'erreur assez élevé. Je vais donc mettre en place un système de vérification des paquets de données et de retransmission, en cas de problème. Ça va compliquer de manière significative mais bon...
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
Merci beaucoup CLS 
Effectivement, je comprend pourquoi mes 10 lignes d'envoi de fichier en une seule fois, ça marchais pas bien
Un truc de dingue ce FTP
Je ne sais pas ce qu'il a mis dans sa barre chocolatée "ReceiveNetworkFile" le FRED, mais pour une fonction pas fiable, elle marchais pas trop mal
Apparement, c'est loin d'etre facile le transfert de fichier....
J'me suis mis dans de beaux draps....heureusement que t'as mis ta cape, parce que je crois que je serais obligé de rentrer dans mon bureau par la fenetre, pendant au moins 1 mois, vu comment j'ai fait baver les collegues avec mes demos.....
Ici Office regne en maitre, et moi, j'suis le petit gaulois qui dit Pb par ci, Pb par la....
Crosoft et son VB, c'est de la daube, regardez ce qu'on peut faire avec un "vrai" language
D'habitude, j'suis tranquille...PB s'en sort facilement, j'ai pas a protéger mes arrieres....
Et ben cette fois....j'l'ai dans l'os et le plus gros.....et j'vous dis pas lequel
CLS t'es un ange, je pense que ton travail, y va etre utile a pas mal d'entre nous....
Parce que y'a pleins de codes sur le US, mais ils sont pas vraiment complets, ficelé, et propre comme le tien
Celui que j'ai torturé pendant une journée, je l'ai trouvé un peu bordelique.....
http://www.purebasic.fr/english/viewtop ... 06#p157362
J'aime pas trop les conditions qui englobent tout un code...parce que j'ai pas arreté de scroller de haut en bas, et en plus je conseille pas d'oter un Endif......apres plus moyen de le remettre
Mais apparement tout le monde avait trouvé ça au top, meme NETMAESTRO, donc j'suis parti sur celui la...
Je crois sans trop me tromper, que tu pourrais etre celebre de l'autre coté
Y'avais aussi un code de IDLE...bien codé un peu a ta maniere, structure et tout et tout, car IDLE c'est un vrai programmeur, mais la .....ça boing et en plus il a juste mis les deux procedures "à sec".
Donc KCC, il a pas su l'utiliser....parce que KCC, il faut aussi lui ouvrir le petit pot de compote et lui tenir la cuillere...sinon il en met plein sa bavette
Ton code il est tellement propre, .........................apparement chez toi on peut manger par terre

Effectivement, je comprend pourquoi mes 10 lignes d'envoi de fichier en une seule fois, ça marchais pas bien

Un truc de dingue ce FTP

Je ne sais pas ce qu'il a mis dans sa barre chocolatée "ReceiveNetworkFile" le FRED, mais pour une fonction pas fiable, elle marchais pas trop mal

Apparement, c'est loin d'etre facile le transfert de fichier....
J'me suis mis dans de beaux draps....heureusement que t'as mis ta cape, parce que je crois que je serais obligé de rentrer dans mon bureau par la fenetre, pendant au moins 1 mois, vu comment j'ai fait baver les collegues avec mes demos.....
Ici Office regne en maitre, et moi, j'suis le petit gaulois qui dit Pb par ci, Pb par la....
Crosoft et son VB, c'est de la daube, regardez ce qu'on peut faire avec un "vrai" language

D'habitude, j'suis tranquille...PB s'en sort facilement, j'ai pas a protéger mes arrieres....
Et ben cette fois....j'l'ai dans l'os et le plus gros.....et j'vous dis pas lequel

CLS t'es un ange, je pense que ton travail, y va etre utile a pas mal d'entre nous....
Parce que y'a pleins de codes sur le US, mais ils sont pas vraiment complets, ficelé, et propre comme le tien

Celui que j'ai torturé pendant une journée, je l'ai trouvé un peu bordelique.....
http://www.purebasic.fr/english/viewtop ... 06#p157362
J'aime pas trop les conditions qui englobent tout un code...parce que j'ai pas arreté de scroller de haut en bas, et en plus je conseille pas d'oter un Endif......apres plus moyen de le remettre

Mais apparement tout le monde avait trouvé ça au top, meme NETMAESTRO, donc j'suis parti sur celui la...

Je crois sans trop me tromper, que tu pourrais etre celebre de l'autre coté

Y'avais aussi un code de IDLE...bien codé un peu a ta maniere, structure et tout et tout, car IDLE c'est un vrai programmeur, mais la .....ça boing et en plus il a juste mis les deux procedures "à sec".
Donc KCC, il a pas su l'utiliser....parce que KCC, il faut aussi lui ouvrir le petit pot de compote et lui tenir la cuillere...sinon il en met plein sa bavette

Ton code il est tellement propre, .........................apparement chez toi on peut manger par terre

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
Je viens d'essayer ton super code.
Et les essais y sont pas concluant....j'ai meme cru que c'etait un des miens
J'ai essayé de transferer une image 'avec une jolie fille".....j'aime bien les jolies filles
114 Ko et ben je sais pas pourquoi, y veut pas la transporter sur le C:\
Alors j'ai essayé un gros fichier excell 8.4 Mo...la il l'a transporté sur le C...mais pas complet (Arret à 1% dans la progressbar) mais en fait j'ai reçu 6.6 Mo
KCC il est nul en math...mais meme lui y sait que 1% de 8.4 ça fait pas 6.6
J't'en donne du tracas
Et les essais y sont pas concluant....j'ai meme cru que c'etait un des miens

J'ai essayé de transferer une image 'avec une jolie fille".....j'aime bien les jolies filles

114 Ko et ben je sais pas pourquoi, y veut pas la transporter sur le C:\

Alors j'ai essayé un gros fichier excell 8.4 Mo...la il l'a transporté sur le C...mais pas complet (Arret à 1% dans la progressbar) mais en fait j'ai reçu 6.6 Mo

KCC il est nul en math...mais meme lui y sait que 1% de 8.4 ça fait pas 6.6

J't'en donne du tracas

Re: Remplacer ReceiveNetworkFile
Non j'ai fait des tests et ça marche pas comme je l'espère. Je vais corriger le tir 

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
Merci...au pire...pendant ce temps la..j'peux ammener a boire...faire un peu a manger..mettre la table..faire la vaisselle !!!! pour me rendre utile 

Re: Remplacer ReceiveNetworkFile
Je trouve étonnant qu'il n'arrive pas à transporter 114k de données alors qu'au bureau il me transfère 40Mo sans trop de problème. Quelle config as - tu sur ton poste ?
En tout cas il y a bien un problème dans certains transferts, je travaille la dessus ('fin dès que j'ai du temps).
En tout cas il y a bien un problème dans certains transferts, je travaille la dessus ('fin dès que j'ai du temps).

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: Remplacer ReceiveNetworkFile
On est au top...W2000 
Et pour PB je me suis mis à la v4.40
Je sais, je sais j'avais juré d'attendre un max....
Mais comme ton code etait en v4.40, j'ai pas osé te demander comment on le transforme en 4.30 vu déjà le mal que tu te donne pour moi
Et pis....fallait bien y aller
Et comme j'ai lu sur le US, un pelo qui posait la meme question que moi, et que la réponse a été plus simple que les "Protozoides"...
Il a dit de mettre @ devant chaque string pour les callfunctions, ou bien pour etre au top utiliser mes "Prototrucs"...
Et ben devine ......comme le seul TOP que j'aurais connu dans ma vie c'est mon TOP CASE .......et ben.....j'ai mis des @ partout
Mes codes maintenant y ressemblent a un carnet d'adresse de outlook
Bah oui pour la photo JPG, j'ai pas compris
J'ai meme changé le nom, des fois que les espaces ne lui plaisent pas
Peut etre que cette fois, c'est trop petit ???
PArce que pour etre sur de ce que je raconte, j'ai essayé tout plein de petits fichiers et ça fait pareil
D'un coté, j'suis un peu rassuré....j'ai cru que ton programme il aimait pas les filles
Par contre, avec un fichier de 1.7 MO...et ben ça le créé en C:\ mais pas complet comme celui de 8.4

Et pour PB je me suis mis à la v4.40

Je sais, je sais j'avais juré d'attendre un max....
Mais comme ton code etait en v4.40, j'ai pas osé te demander comment on le transforme en 4.30 vu déjà le mal que tu te donne pour moi

Et pis....fallait bien y aller

Et comme j'ai lu sur le US, un pelo qui posait la meme question que moi, et que la réponse a été plus simple que les "Protozoides"...
Il a dit de mettre @ devant chaque string pour les callfunctions, ou bien pour etre au top utiliser mes "Prototrucs"...
Et ben devine ......comme le seul TOP que j'aurais connu dans ma vie c'est mon TOP CASE .......et ben.....j'ai mis des @ partout

Mes codes maintenant y ressemblent a un carnet d'adresse de outlook

Bah oui pour la photo JPG, j'ai pas compris

J'ai meme changé le nom, des fois que les espaces ne lui plaisent pas
Peut etre que cette fois, c'est trop petit ???

PArce que pour etre sur de ce que je raconte, j'ai essayé tout plein de petits fichiers et ça fait pareil

D'un coté, j'suis un peu rassuré....j'ai cru que ton programme il aimait pas les filles

Par contre, avec un fichier de 1.7 MO...et ben ça le créé en C:\ mais pas complet comme celui de 8.4
