ReceiveNetworkData

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

ReceiveNetworkData

Message par Backup »

.........................
Dernière modification par Backup le sam. 19/mars/2011 17:30, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ReceiveNetworkData [Resolu]

Message 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 ! ;)
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: ReceiveNetworkData

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ReceiveNetworkData

Message par Backup »

.....................
Dernière modification par Backup le sam. 19/mars/2011 17:30, modifié 1 fois.
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: ReceiveNetworkData

Message 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. :?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: ReceiveNetworkData

Message 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.
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: ReceiveNetworkData

Message 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.
Répondre