Page 1 sur 1

ReceiveNetworkData

Publié : mer. 10/nov./2010 16:03
par Backup
.........................

Re: ReceiveNetworkData [Resolu]

Publié : mer. 10/nov./2010 17:31
par Backup
bon je me repond a moi meme :)

voici ce qu'il faut faire pour ne pas avoir d'erreur ou de blocage de cette fonction : :)

Code retiré car non fiable ! ;)

Re: ReceiveNetworkData

Publié : jeu. 11/nov./2010 17:37
par Le psychopathe
Dobro a écrit :une fois n'est pas coutume, j'ai besoin qu'on m'explique cette fonction !

je pensai que la forme standard d'utilisation de cette fonction etait :

Code : Tout sélectionner

*Buffer = AllocateMemory(taille) 
While  ab<taille 
    ab= ReceiveNetworkData(ConnectionID,*Buffer ,taille)  
    b.S = b.S+PeekS(*Buffer,-1,#PB_UTF8 )  
Wend 
FreeMemory(*Buffer)
 
Salut dobro,
Il me semble que tu fasses fausse route même avec ta réponse plus bas ;)
Je te fais un code à l'arrache et je m'en vois désolé mais je n'ai pas pb sous lies yeux ;)

Code : Tout sélectionner

Global taille = 1000
Global b.s
*Buffer = AllocateMemory(taille) 

Procedure reception()
  ab = taille
While  ab=taille 
    
  ab= ReceiveNetworkData(ConnectionID,*Buffer ,taille)  
  If ab=taille
    taille = taille + taille
    *Buffer = ReAllocateMemory(*Buffer, taille)
  EndIf
  If ab = -1
    ProcedureReturn (-1)
; sortie de procedure à faire
  EndIf
  
Wend 
 b = PeekS(*Buffer,-1,#PB_UTF8 )  
 FreeMemory(*Buffer)
EndProcedure

Re: ReceiveNetworkData

Publié : jeu. 11/nov./2010 18:28
par Backup
.....................

Re: ReceiveNetworkData

Publié : mer. 17/nov./2010 16:16
par Le psychopathe
Je ne comprends pas pourquoi en divisant par dix cela fonctionne et pas autrement.
Par contre je ne peux pas de répondre sans voir un peu plus de code car dans tout mes programmes résseaux ( que je n'ai pas encore terminé) : je n'ai eu aucun problème de reception dans le buffer.
Donc cela m'intrigue ton code. :?

Re: ReceiveNetworkData

Publié : mer. 17/nov./2010 16:57
par G-Rom
j'ai toujours cru que cette fonction est bloquante , j'envois généralement des packet de donnée à taille fixe , par exemple 1000 bytes , avec un flag sur 1 bit pour le type de message , suivi d'un integer pour la taille du message , si le message est plus grand que 1000 bytes , le reste du message sera recu au prochain appel de cette fonction.
et ca marche très bien.

Re: ReceiveNetworkData

Publié : jeu. 18/nov./2010 10:20
par gnozal
Dobro a écrit :...
quoiqu'il en soit, il me semble que cette fonction (ReceiveNetworkData())
est tres tres tres mal foutue !
A mon avis :

1. Tu devrais utiliser NetworkClientEvent(), çà évite d'être "bloqué" : on n'appelle ReceiveNetworkData() que s'il y a des données.

Code : Tout sélectionner

    If NetworkClientEvent(ConnectionID) = #PB_NetworkEvent_Data
      BytesRead = ReceiveNetworkData(ConnectionID, *Buffer, Buffer_Len)
      ...
    EndIf
2. Ensuite, un "time out" est utile : il permet de quitter la boucle si rien ne s'est passé pendant x secondes.

Code : Tout sélectionner

    If Date() > LastDate + TimeOut
      Break
    EndIf
3. Le "test de sortie" est à la charge du programmeur, comme le suggère G-Rom.