récupération bytes par réseau

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

récupération bytes par réseau

Message par jmg49 »

Bonjour,

je sais maintenant comment lire un fichier, placer les données dans un bloc mémoire pour après , soit appliquer un chiffrement dessus, soit réécrire dans un fichier...

j'essaie de faire une opération similaire mais par le réseau, j'ai un serveur en écoute sur un port tcp , depuis un poste Windows, je lance une connexion sur l'ip / port

le serveur m'envoie alors des données (une .dll) je ne connais pas sa taille, le but est que je la récupère dans un buffer mémoire...

Code : Tout sélectionner


Enumeration
  #FEN1
  #FEN1_Edit
EndEnumeration

size.l = 1000000

InitNetwork()

remoteip.s ="10.48.54.186"

port.i = 4444

*Buffer = AllocateMemory(size.l)


OpenWindow(#FEN1, 320, 200, 1200, 650,
           " Stager ", 
           #PB_Window_SystemMenu |
           #PB_Window_ScreenCentered)

EditorGadget(#FEN1_Edit, 650, 150, 500, 450)



konnektID=  OpenNetworkConnection(remoteip,port)

Repeat 
  
  event =WindowEvent()
  
  Eclient =  NetworkClientEvent(konnektid)
  
  Select Eclient
      
    Case #PB_NetworkEvent_Data   
      
      
      result=   ReceiveNetworkData(konnektid, *Buffer ,size)
        
      
      
      AddGadgetItem(#FEN1_Edit,0 ,PeekS(*Buffer,#PB_Unicode))
      
      
      
      
  EndSelect
  
   
  
  
Until GetAsyncKeyState_(#VK_ESCAPE)


j'ai bien des données qui arrivent, affichées dans mon gadget_edit mais je ne sais pas s'il y a tout le fichier ...

étant donné que la réception des données est dans la boucle repeat / until , vaudrait-il mieux que je passe par un while /wend ?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: récupération bytes par réseau

Message par falsam »

Code : Tout sélectionner

size.l = 1000000
Tu es en TCP : La taille maximum est de 65536
j'ai bien des données qui arrivent, affichées dans mon gadget_edit mais je ne sais pas s'il y a tout le fichier ...
Result renvoie la taille de ce que viens de recevoir. L'idéal serait de comparer ce chiffre avec la taille de ta DLL.

Seulement voila : Tu ne la connais pas apparemment. ^^

Peut être que ton serveur pourrait dans un premier temps envoyé la taille de ta DLL et ensuite la dll et dans ce cas tu peux comparer.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: récupération bytes par réseau

Message par jmg49 »

merci Falsam , La taille maximum est de 65536

effectivement, j'avais modifié pour voir ce que ça faisait sur le résultat :D

côté serveur en investiguant un peu j'ai la taille : 957999 bytes je vais pouvoir avancer un peu
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: récupération bytes par réseau

Message par falsam »

Une autre solution serait d'envoyer un fichier JSON contenant deux variables.
- La taille de la DLL
- La DLL elle même
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: récupération bytes par réseau

Message par djes »

Tu le sais sans doute, mais tu peux t'inspirer du code d'exemple de l'atomic web server dans le dossier exemple. Il crée une réponse http, mais rien ne t'empêche de créer ton propre protocole. Ce qui est intéressant, c'est le mécanisme de découpe et d'envoi du fichier.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: récupération bytes par réseau

Message par falsam »

ReceiveHTTPFile() peut être aussi une solution.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre