Bonjour,

J'aimerais faire en sorte que mon serveur accepte les messages que d'une seule IP : parametresServeur.sin_addr = _parametresClient.sin_addr; mais ça ne fonctionne pas dans mon cas (serveur C++, clients sour Android en JAVA).

Le communication entre mon serveur et mes clients doit se faire avec 2 sockets (un pour l'émission et un autre pour la réception sur 2 ports séparés). Pour le 1er socket il n'y a aucun problème. Par contre mon 2ème socket n'arrive pas à "binder", c'est sans doute dût au fait que j’attends une connexion d'une seule adresse ip.

Le code suivant est le code pour le 2ème socket (on connait l'adresse ip du client grâce à la 1ere socket donc on accepte que les connexions ne venant que de ce téléphone).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
parametresServeurEmission.sin_addr = _parametresClient.sin_addr;
parametresServeurEmission.sin_family = AF_INET;
parametresServeurEmission.sin_port = htons(_portEmission);
 
int arg = 1;
setsockopt(socketTemporaire, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, sizeof(int));
if(bind(socketTemporaire, (SOCKADDR*)&parametresServeurEmission, sizeof(parametresServeurEmission)) == 0) // Ligne qui cause l'erreur
Plusieurs précisions :
- Le serveur est en C++ et les clients sont en Java (sur Android).
- Avec les clients et le serveur executés sur ma machine ce code fonctionne très bien (avec un .jar pour le(s) client(s)).
- _parametresClient.sin_addr renvoie bien l'adresse ip du client
- Dès que j’exécute le code sur Android (émulateur ou vrai téléphone) il y a une erreur lors du bind.
- avec un client sous Android ça fonctionne très bien si je fait sin_addr.s_addr = ADDR_ANY sur le serveur, mais ce n'est pas ce que jeu veux car ça peut générer des bugs lors de connexions simultanées de clients.
- Le reste du code pour se connecter est le même qu'ici par exemple, avec seulement la 1ere ligne que j'ai mis au dessus qui est différente.
- 1 client = un thread, c'est pour cela que je ne doit pas me tromper dans les associations sockets/clients.