Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-05-15 14:38:47 Besoin d'explications sur code de connexion TCP

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Besoin d'explications sur code de connexion TCP



Bonjour,

J'ai besoin d'explications concernant la réception et l'envoi de messages par le réseau en TCP.
J'utilise ofxTCPClient pour communiquer avec des video projecteurs connectés en réseau. Le but est de leur passer un signal d'allumage ou d'extinction par exemple. Tous n'utilisent pas le même protocole, mais certains partagent un même protocole qui s'appelle PJLINK, c'est sur ce protocole que je travaille actuellement. Pour le reste j'adapterai, je connais les commandes (qui sont différentes de PJLINK).

Mon soucis est donc : la gestion des envois et réceptions de paquets sur le réseau. J'arrive à initier la communication mais je ne vois pas comment savoir ce qui est retourné.

Pour info, je pars d'exemples trouvés sur le net ou des exemples des addon oF. Tous envoient des paquets mais ne "lisent" pas ce qui est retourné.

Précisions sur le protocole :

- connexion au VP par un setup(IP, PORT)
- le VP doit me renvoyer "PJLINK 0" si la connexion est non sécurisée, ou "PJLINK 1" si le vp attend un identifiant et un mot de passe. Pour simplifier les choses j'ai supprimé l'identification, donc le VP retourne "PJLINK 0"
- à partir de la on peut envoyer une commande. Par exemple "%1POWR ?" demande l'état du VP. La réponse attendue est "%1POWR=0" si le VP est éteint, et "%1POWR=1" si le VP est allumé.

A noter que dans le protocole, il est préciser que la réponse est renvoyée dans un délai max de 2 secondes.

Le code que j'ai actuellement :

NOTE : j'ai un commentaire surtout sur les conditions, en fait je vois pas ce qu'elles gèrent ? je crois que je ne comprend tout simplement pas le fonctionnement de receiveRaw() et sendRaw().

	string msgRx;
	
	if(!connected) {
		connected = pjClient.setup("192.168.5.225", 4352);
		cout << "connection established: 192.168.5.225 port 4352" << endl;
		while (msgRx.length() < 8)                          // POURQUOI < 8 ?
		{
			msgRx = pjClient.receiveRaw();
			if(msgRx.length() > 6)                        // A QUOI SERT CETTE CONDITION ?
			{
				cout<< msgRx << endl;
			}
		}
	}
	else if(!pjClient.isConnected()) {
		cout << "connection failed for 192.168.5.225 on port 4352" << endl;
		connected = false;
	}

	cout << "sending command: %1POWR ?" << endl;
	string command = "%1POWR ?\r";
	pjClient.sendRaw(command);
	msgRx = "";
	//for(int i=0; i<200000000;i++){}
	while (msgRx.length() < 8)                               // MEME QUESTION !!! ET POURQUOI PAS LE 
                                                                              // MEME SYSTEME QU'A L'ENVOI ?
	{
		msgRx = pjClient.receiveRaw();
		cout<< msgRx << endl;
	}
	
	pjClient.close();
	connected = false;
}

NB : A la connexion, je reçoit bien dans la console le message "PJLINK 0".
A l'envoi du message je recoit aussi en réponse "PJLINK 0"

Pour info j'ai essayé d'attendre les 2 secondes préconisées par le protocole. Au passage j'ai pas réussi à trouver comment faire une pause. J'ai essayé pause(), delay() ou sleep() mais ça ne fonctionne pas, ça bloque la connexion. D'ou ma bidouille avec la boucle     for(int i=0; i<200000000;i++){}

Merci de votre coup de main

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024