Page 1 sur 1

récupération bytes par réseau

Publié : ven. 03/févr./2017 14:06
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 ?

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

Publié : ven. 03/févr./2017 15:20
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.

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

Publié : ven. 03/févr./2017 15:32
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

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

Publié : ven. 03/févr./2017 15:37
par falsam
Une autre solution serait d'envoyer un fichier JSON contenant deux variables.
- La taille de la DLL
- La DLL elle même

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

Publié : ven. 03/févr./2017 15:57
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.

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

Publié : ven. 03/févr./2017 19:58
par falsam
ReceiveHTTPFile() peut être aussi une solution.