Bonsoir,
J'essaie d'initialiser une connexion TCP à une adresse IP qui n'existe pas pour tester ma boucle. Celle ci est censée arrêter le processus en renvoyant une "erreur de connection" quand la connexion n'est pas dispo, sinon on entre dans le traitement en envoyant des messages sur le réseau.
Si l'adresse IP est atteignable, il y a bien une connexion et le message envoyé est bien recu.
Si l'adresse n'existe pas, l'appli freeze et je suis obligé de tuer l'appli !
J'utilise la librairie ofxTCPClient sur oF 0.7.4
mon code...
déclaration :
ofxTCPClient netClient;}
puis :
if(!netClient.setup(IPAddress, PJLINK_PORT)){return "CONNECTION ERROR !";}
Comment faites vous pour vous connecter à une adresse ?
Merci
Dernière modification par Marty (2013-05-08 00:02:03)
Hors ligne
re-bonjour,
je me suis rendu compte que l'application freeze tant que la tentative de connexion est en cours. La main est redonnée au bout d'un certain temps après un TIMEOUT.
J'ai en attendant réfléchi à une autre solution, à savoir envoyer un ping pour tester l'adresse et si j'ai une négative j'affiche un message d'erreur... or cette solution est bloquante également !
D'après ce que j'ai compris il faudrait mettre cette action en "thread". Si j'ai bien compris le principe, ça veut dire lancer la tentative de connexion et redonner la main jusqu'à l'obtention d'une réponse.
De la j'ai deux questions :
- Un thread se met il en place facilement ? j'ai cru comprendre que cela était un peu délicat et surtout j'ai regardé quelques exemples avec ofxThread mais j'avoue que cela ne me parle pas vraiment ! pouvez vous m'expliquer ?
- La librairie ofxTCPClient n'est elle pas déjà "threadée" ? cela me semble étonnant.
Je suis preneur de toute suggestion pour mettre en place une connexion réseau fonctionnelle.
Merci à vous
Hors ligne
J'ai pas de réponse à ta question mais je me dis que tu saurais (au vue de ta question) peut-être répondre à une question plus simple.
Sais-tu comment envoyer une simple requête http ?
Je dois coder une application merdique sur windows que je découvre et ça me semble plus relou que sur linux où ça se fait très simplement.
Hors ligne
Marty a écrit:
De la j'ai deux questions :
- Un thread se met il en place facilement ? j'ai cru comprendre que cela était un peu délicat et surtout j'ai regardé quelques exemples avec ofxThread mais j'avoue que cela ne me parle pas vraiment ! pouvez vous m'expliquer ?
- La librairie ofxTCPClient n'est elle pas déjà "threadée" ? cela me semble étonnant.
Je ne peux pas t'aider pour la première partie, je ne connais pas openframework
Mais dans l'absolu, oui cela se met en place facilement, après il faut faire gaf quand tu partages des données entre deux threads.
Et non, je ne pense pas qu' ofxTCPClient soit threadé, justement pour ce problème: si ofxTCPClient tourne en tache de fond et que tu essais de lire des données sur une connexion en attente/cassée/whatever d'après toi il se passe quoi ?
Hors ligne
Salut Geb,
Merci pour ta réponse. Logique comme explication. Dans tous les cas ce que je ne comprend pas c'est pourquoi cette tentative de connexion est bloquante ?
pour initier une connexion il y a une méthode
bool ofxTCPClient::setup(string Adresse_IP, int PORT)
Je déclare donc un objet
ofxTCPclient tcpClient;
mais quand je l'utilise
bool connected = tcpClient.setup(IP_Addr, portNum);
ça fonctionne si l'adresse ip et port sont ok, autrement dit si il arrive à se connecter et connected = true.
si l'adresse est mauvaise ou n'existe pas, l'appli freeze !!! pourquoi diable ne redonne-t-il pas la main et renvoie tout simplement "false" ? c'est pourtant sa fonction ?
Je veux bien mettre tout ça dans un thread, mais le problème sera plus ou moins le même, autrement dit : le programme me redonnerai bien la main, mais moi j'attendrai toujours ma réponse, à savoir true ou false...
ou alors je fais une boulette de mon côté...
Dernière modification par Marty (2013-05-15 10:08:11)
Hors ligne