[Résolu]changer de port à la volée de EthernetServer server(80); c'est possible?

Salut a tous, ça fait longtemps que je ne suis pas venu sur le forum et me voila don avec une nouvelle question dont je ne trouve pas la réponse.

Je voulais savoir si on peut changer le port à la volée dans le programme déclaré par:

EthernetServer server(80);

J'aimerais prévoir une interface html qui me permettrait de changer la valeur 80 par autre chose de mon choix (85,8088,8081 etc...).

Mais dans la librairie Ethernet je ne trouve pas le moyen de le faire et sur le net je n'ai trouvé personne qui l'ait fait?

Vous savez si c'est possible?

Merci,
John

Salut, tu peux sans problème changer le port dans ton code !

Je veux bien savoir comment?

Attention je sais remplacer 80 par autre chose dans le code, mais ce que je veux c'est changer la valeur quand l'arduino fonctionne, sans l'IDE!

Bonsoir,

Mettre une variable au lieu d'une valeur fixe ?

Oui j'ai commencer par le faire, mais comment je refait la déclaration EthernetServer server(server_port);
quand l'arduino est en route?
Un reboot suffit?
C'est repris en compte?

Je ferais un test demain...

Bon j'ai testé ce week end mais impossible de changer la valeur au reboot de la carte.
La valeur est lue une fois par le programme à la compilation mais après je n'arrive pas à la changer.

Quelqu'un aurait une idée?

Personne n'a d'idée? Je ne vois toujours pas comment faire?

A la limite, tu peux la stocker dans l'EEPROM.

Avant de reboot, tu changes sa valeurs et ainsi de suite.
Par contre, je vois pas l'intérêt de changer de port ...

Moi, c'est pareil, je ne comprend pas trop pourquoi tu veux changer de port ???

renaudyes:
A la limite, tu peux la stocker dans l'EEPROM.

Avant de reboot, tu changes sa valeurs et ainsi de suite.
Par contre, je vois pas l'intérêt de changer de port ...

J'ai essayé mais le problème c'est que l'initialisation a lieue en dehors de la boucle Setup donc comment je fais pour récupérer la valeur AVANT l'init?

renaudyes:
Par contre, je vois pas l'intérêt de changer de port ...

Fredericzim:
Moi, c'est pareil, je ne comprend pas trop pourquoi tu veux changer de port ???

Dans mon réseau il y a plusieurs appareils, et pas tous sur le même port.
Du coup en sélectionnant le bon port depuis " l'exterieur " je me connecte sur le bon appareil en gérant la redirection des ports.
Par exemple, j'ai un serveur web qui va se diriger avec le port 80.
Un arduino uno+eth qui va rediriger vers le port 82
Et là j'aimerais rediriger vers le port 90 pour ma mega+eth.

Le soucis c'est que si pour une raison ou une autre le port 90 est déjà pris, je suis bloqué. Je dois recompiler et remettre le programme dans la carte pour que ça marche.
Alors qu'avec une interface web je pourrais le changer à la volée, ce serait plus pratique.

Si j'ai un conflit de port je voudrais pouvoir parametrer le shield avec une interface web plutot que de devoir le reprogrammer.

Je crois que j'ai trouvé une solution en allouant dans l'EEPROM et en rebootant la carte pour que la nouvelle valeur soit lue.

Ce que je ne faisais pas c'était le reset donc la nouvelle valeur inscrite n'était jamais lue de nouveau par le programme.

Le reset résout apparemment le problème

Oui, il faut faire un reset pour que les nouveaux "objets" soient créés.

-> Tu sais que tu peux gérer jusque 4 clients ( à vérifier quand même ) sur un même port ?

Enfin, si tout fonctionne, c'est parfait.

renaudyes:
-> Tu sais que tu peux gérer jusque 4 clients ( à vérifier quand même ) sur un même port ?

Je veux bien en savoir plus la dessus, as-tu des infos? Un exemple? Un lien vers de la doc?

J'ai vu ça ici : Ethernet - Arduino Reference

Je n'ai jamais utilisé un module ethernet, je ne sais donc pas comment on le fait :/. Une bref recherche sur internet ne m'as pas beaucoup aidé non plus.

J'ai plutôt l'impression qu'on ouvre le client et une fois que la tâche est terminée, on le ferme :

Ce qui revient à faire votre changement de port ( sans le reboot -> plus rapide ), sauf qu'ici on ouvre/ferme le client sur un même port ;).

Une réponse m'a été donnée par SurferTim:
http://forum.arduino.cc/index.php?topic=343039.msg2366768#msg2366768

Je pense que c'est ce que tu cherchais?

:wink:

// add this to includes
#include <utility/socket.h>

// in global variable area
EthernetServer server1(80);
EthernetServer server2(8080);
// set server to server1
EthernetServer server = server1;

// in setup
 server.begin();

// to change ports
      // change server to server2
      server = server2;
      // close all sockets
      for(byte i = 0 ;i < MAX_SOCK_NUM;i++) {
        close(i);
      }
      // start server2
      server.begin();