Aidez avec Client Port setup dans l'EthernetClient

Bonjour,

J'ai environs 20 arduinos connectés sur l'internet et ils envoient des datas sur mon serveur. Le problen est que memme si chaque arduino a unique IP, la librarie done automatiquement le meme Port a tous: 1024

Les connections de chaque arduino sur le serverur ne peuve donc pas etre reconu induviduallement car le serveur identifie le meme WAN et le meme Port pour chaque connection.

J'ai lu un post sur le Forum ici qu'il me faut changer l'EthernetClient.cpp Ligne 53

Y-a-t il quelqun qui peut m'aider a trouver une sollution?

Marci a tous! Peter

Le numéro du port utilisé est passé en argument de la méthode connect

virtual int connect(IPAddress ip, uint16_t port);
virtual int connect(const char *host, uint16_t port);

En même temps je suis très surpris qu'un serveur ne soit pas capable de faire la différence entre 2 clients qui se connectent avec des IP différentes. Je ne serais pas étonné que le problème soit ailleurs.

Merci pour ta réponse, mais le connect(IP,Port) est pour definir le serveur destinateur de la connection. Imagine t'a 20 arduinos avec 20 IP diferentes a la maison.

192.168.1.100 192.168.1.101 ... 192.168.1.119 192.168.1.120

Tous le duinos sont connectés sur l'internet en utilisant un seule router avec une seule address WAN example 89.125.48.78. Le serveur sur l'inernet peut voir seulement le suivant:

89.125.48.78 89.125.48.78 ... 89.125.48.78 89.125.48.78

Comment les duinos peuvent etre identifiés l'un de l'autre? Ce qu j'ai besoin est comment esque je peut distinguer les cliénts?

Peter

Bonjour,

C’est quoi le protocole de communication que tu utilises ? HTTP ?
Si oui il te suffit d’ajouter un identifiant de session unique à chaque Arduino dans les entêtes HTTP que tu envois.
Tu peut même faire plus simple si c’est du HTTP en incluant l’ip en tant qu’argument du GET (exemple GET /monscript.php?ip=blabla).

skywodd: j'utilise le TCP protocol pour les connections. Quoi faire?

Merci

bonjour, le server est en interne sur la même plage ip? si oui, y a un blem quelque part.

si le server est externe ou derrière un router, il te faut les différencier, car ils auront tous la même ip.

donc la méthode de skywodd est la meilleure. dans le même style tu peux mettre dans ta requete un champ en plus, style nono=1 nono=2 etc...

skywodd et infobarquee: Je n'utilise pas le HTTP protocol, mais le TCP connection toute simple. Comme j'ai deja expliqué:

Tous les 10 Arduinos (IP: du 192.168.1.100 au 192.168.1.110) sont connectés sur l'internet en utilisant un seule router avec l'address WAN example 89.125.48.78. Le serveur (IP: 46.58.111.32) peut recevoir les connections, mais les arduinos ne peuvons pas etre diferenciés. Ils ont le meme port et l'IP.

Pour example l'Arduino sketch je utilise mois est le TelnetClient.pde C'est ca le probleme et il me faut le TCP. Pas le HTTP.

Merci a l'avance!

je vois pas le soucis franchement. tes nonos se connectent au server distant. ils envoient leur données avec une id unique chacun ton server lit ces données, les parses et applique ce qu'il a a appliquer suivant l'id recue

après si tu envoie du server vers les nonos le server envoie des données avec un id unique pour distingo ou avec un port unique, routeur configuré aussi

Le sucis ets celui ci: Les connections de mes nonos sur le serverur ne peuve pas etre reconu induviduallement par le serveur car il identifie le meme IP et le meme Port pour chaque de mes nonos. Ils ne peuvent pas etre connectés tous au meme temps.

quel "id unique"? C'est le suivant? La connection TCP est identifiée seulement par: 1) le protocol (ex: TCP ou UDP) 2) IP du client + Port du client 3) IP du serveur + Port du serveur

extrait d'un article http://www.tcpipguide.com/free/t_TCPPortsConnectionsandConnectionIdentification.htm The overall connection between these devices can be described using this socket pair: (41.199.222.3:80, 177.41.72.6:3022)

hubajs: quel "id unique"? C'est le suivant? La connection TCP est identifiée seulement par: 1) le protocol (ex: TCP ou UDP) 2) IP du client + Port du client 3) IP du serveur + Port du serveur

Si tu envois des trames en TCP tu a forcément au dessus défini un protocole de communication. Si ce n'est pas le cas tu fonces droit dans le mur ... à un moment ou un autre tes deux entités (serveur et arduino(s)) vont devoir se parler, et si elles ne parles pas la même "langue" (= protocole) c'est peine perdu.

D'où ma question : quelle protocole de communication utilises-tu ? Même un truc maison du style "j'envoi TOTO, je reçois TATA en réponse" c'est un protocole de communication (à ne pas mélanger avec un protocole de transport, TCP par exemple).

Quand tu auras la réponse à cette question tu pourras te demander : qu'est ce qui m'interdit d'y ajouter une notion de session ?

@hubajs : pour simplifer ce que tout le monde veut dire c'est que puisque tu envois imaginons une mesure analogique, au lieu d'envoyer "1000" par exemple tu envois "Arduino1=1000" , "Arduino2=540" ... L'IP de l'émetteur n'a aucune importance