PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → socket UDP - lenteur avec SocketEcrit
socket UDP - lenteur avec SocketEcrit
Débuté par jean-michel.deglorie, 16 avr. 2005 03:00 - 5 réponses
Posté le 16 avril 2005 - 03:00
Bonsoir,

J'utilise une appli Windev pour dialoguer en UDP avec un composant serveur écrit dans un autre langage.
Mon code client se résume à cela :
--------------------------------------
SI PAS SocketCréeUDP(Ma_Socket,Port_Ma_Socket,NetAdresseIP()) ALORS
Erreur("Erreur... " + ErreurInfo(errMessage))
SINON
// Traitement
...
SI SocketEcrit(Ma_Socket,Ma_Chaine,IP_Serveur,Port_Serveur) ALORS
Resultat = SocketLit(Ma_Socket,Faux,500)
....
FIN
...
FIN
...
SocketFerme(ma_socket)
--------------------------------------
Mon pb :
La fonction SocketEcrit est très lente (plus de 2 sec pour envoyer quelques caractères) alors que la fonction SocketLit est quasi instantanée.
Je me suis assuré du bon fonctionnement de la partie serveur en écrivant dans un autre langage la même routine. Donc RAS du coté serveur.
Le pb de lenteur provient bien de mon appli windev et de cette fonction SocketEcrit.
Est-ce que quelqu'un peut m'aider à comprendre le phénomène et à trouver une solution à ce pb de lenteur ?
Merci pas avance
JMD
Posté le 02 mai 2005 - 12:46
JM Deglorie a formulé la demande :
Bonsoir,

J'utilise une appli Windev pour dialoguer en UDP avec un composant serveur
écrit dans un autre langage. Mon code client se résume à cela :
--------------------------------------
SI PAS SocketCréeUDP(Ma_Socket,Port_Ma_Socket,NetAdresseIP()) ALORS
Erreur("Erreur... " + ErreurInfo(errMessage))
SINON
// Traitement
...
SI SocketEcrit(Ma_Socket,Ma_Chaine,IP_Serveur,Port_Serveur) ALORS
Resultat = SocketLit(Ma_Socket,Faux,500)
....
FIN
...
FIN
..
SocketFerme(ma_socket)
--------------------------------------
Mon pb :
La fonction SocketEcrit est très lente (plus de 2 sec pour envoyer quelques
caractères) alors que la fonction SocketLit est quasi instantanée. Je me suis
assuré du bon fonctionnement de la partie serveur en écrivant dans un autre
langage la même routine. Donc RAS du coté serveur. Le pb de lenteur provient
bien de mon appli windev et de cette fonction SocketEcrit. Est-ce que
quelqu'un peut m'aider à comprendre le phénomène et à trouver une solution à
ce pb de lenteur ? Merci pas avance JMD


J'ai le même problème.
Quelqu'un a-t-il la solution ?

--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Posté le 02 mai 2005 - 14:03
le serveur demande peut être un caractère de fin de chaine spécifique avant
de pouvoir déterminer la fin du socketecrit et la libération pour la
commande suivant.
voir aussi du coté de SocketChangeModeTransmission() (normalement n'influe
que sur socketlit mais à tester quand me^me)

"Eric Laurent" <nospam.laurent.systel@wanadoo.fr> a écrit dans le message de
news:mn.12867d55b12daf89.17482@wanadoo.fr...

JM Deglorie a formulé la demande :
Bonsoir,

J'utilise une appli Windev pour dialoguer en UDP avec un composant

serveur
écrit dans un autre langage. Mon code client se résume à cela :
--------------------------------------
SI PAS SocketCréeUDP(Ma_Socket,Port_Ma_Socket,NetAdresseIP()) ALORS
Erreur("Erreur... " + ErreurInfo(errMessage))
SINON
// Traitement
...
SI SocketEcrit(Ma_Socket,Ma_Chaine,IP_Serveur,Port_Serveur) ALORS
Resultat = SocketLit(Ma_Socket,Faux,500)
....
FIN
...
FIN
..
SocketFerme(ma_socket)
--------------------------------------
Mon pb :
La fonction SocketEcrit est très lente (plus de 2 sec pour envoyer

quelques
> > caractères) alors que la fonction SocketLit est quasi instantanée. Je me
suis
assuré du bon fonctionnement de la partie serveur en écrivant dans un

autre
> > langage la même routine. Donc RAS du coté serveur. Le pb de lenteur
provient
bien de mon appli windev et de cette fonction SocketEcrit. Est-ce que
quelqu'un peut m'aider à comprendre le phénomène et à trouver une

solution à
ce pb de lenteur ? Merci pas avance JMD

J'ai le même problème.
Quelqu'un a-t-il la solution ?

--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Posté le 02 mai 2005 - 14:17
David B a présenté l'énoncé suivant :
le serveur demande peut être un caractère de fin de chaine spécifique avant
de pouvoir déterminer la fin du socketecrit et la libération pour la
commande suivant.
voir aussi du coté de SocketChangeModeTransmission() (normalement n'influe
que sur socketlit mais à tester quand me^me)

Merci pour ta réponse.
Malheureusement, SocketChangeModeTransmission() ne peut pas être
appliqué.
Extrait de l'aide:
Remarque : Sockets UDP : Les sockets de type UDP sont toujours de type
"Socket sans marqueur". La fonction SocketChangeModeTransmission ne
doit pas être utilisée avec des sockets de type UDP.

Une autre idée ?

--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Posté le 30 décembre 2005 - 21:59
J'ai constaté le même dysfonctionnement, il y a 4,5 secondes d'utilisées par la fonction SocketEcrit pour interroger un DNS (qui n'a bien sûr la pa réponse à la question) puis, enfin, le ScocketEcrit s'apperçoit qu'il a à faire à une adresse IP, et exécute la commande.

Ce phénomène disparaît en ajoutant des résolutions dans c:\windows\system32\drivers\etc\hosts

ce qui n'est bien sûr pas une solution.

Parfois, si l'adresse IP est passé en tant que chaîne avec des guillemets, ça peut passer.

Bonne chance

Idem pour les fonctions "httprequête"
Posté le 12 janvier 2006 - 18:21
oui j'ai le même problème car j'ai une liaison avec un automate Omron.
Pour palier à cela, dans les config de la connexion réseau , je desactive Netbios (parametre IP/TCP) defaut ---> desactiver.
On passe de 4,5s à 0,002s beaucoups mieux
L'inconveniant ne pas eteindre le PC ou se deconnecter du reseau car perte du reseau
Si quelqu'un a une autre solution ???