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.
3. Le "test de sortie" est à la charge du programmeur, comme le suggère G-Rom.