ivanoff1
Messages postés99Date d'inscriptionlundi 14 octobre 2002StatutMembreDernière intervention28 décembre 2005
-
10 janv. 2005 à 08:34
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
10 janv. 2005 à 09:39
Bonjour a tous
J'aimerais vous poser une ou deux questions.
Tout d'abord, je voudrais savoir si j'ai bien compris le principe des Socket.
1) Le serveur ecoute le port en continu
2) Le client se connecte au port du serveur,
Le serveur se met alors en attente par la méthode Accept.
3) Le client envoie ses données
Le serveur les reçoit jusqu'à ce que Socket.Available == 0.
4) Le client se déconnecte.
C'est bon ?
Est-ce que le client est toutjours obligé de faire ces étapes : connexion, envoi, déconnexion ?
Deuxièmement, J'aimerais que lorsque le serveur reçoit les données, il fasse un accusé de réception vers le client, comment faire et à quel moment ?
Enfin, lorsque le serveur renvoi l'accusé, je voudrais que le client retourne une nouvel fois ces données au serveur. Pour ce faire, j'ai crée une méthode d'ecoute du serveur qui se fait juste après la connexion vers le serveur. Est-ce bien le bon moment, n'y a-t-il pas d'autre moyen ?
Aidez-moi, SVp...
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 10 janv. 2005 à 09:05
Disons que le principe est bon, apres ca depend de comment tu veux architecturer ton serveur.
1) Le serveur ecoute bien le port en continue, jusqu'a qu'un client se connect ( Accept).
Ensuite, ca depend.
Personellement, comme j'autorise plusieurs clients a se connecter simultanément j'ai :
- Un thread (et un socket) qui ecoute en permanence les connexions (et qui ne s'arrete qu'a l'arret du serveur).
Des qu'un client se connecte :
- Je crée un nouveau socket propre au client
- Je crée un nouveau Thread propre au client, et je le lance.
- J'instancie une classe qui regroupe toutes ces données (tel socket et tel thread vont ensemble, c'est le client n° 1).
- J'ajoute cette instance dans une arraylist qui regroupe tous mes clients connectés
Le thread créé a pour but d'écouter le client en question, et donc de
recevoir les données, puis de lui en envoyer si besoin est.
Si le client se deconnecte, le Thread s'arrete, le socket se ferme, j'enleve l'instance du client correspondant de l'arraylist.
Donc, le client n'est pas toujours obligé de faire "connexion, envoi, deconnexion".
Enfin si, mais la deconnexion n'a lieu que quand il le décide. Apres 35 envois, 12 receptions, et 25 minutes par exemple.
Pour l' "accusé de reception", j'ai peut-etre pas la meilleure
méthode. Mais je dis juste a mon serveur d'envoyer un message que le
client et le serveur comprennent et qui dit "OK". C'est a toi
d'inventer un petit protocole de communication.
Ce qui oblige en fait le client a avoir une méthode d'écoute du serveur lui aussi, evidement.
Et pour ton Troisieme point, ca rejoint un peu les 2 premiers. Ton
client peut envoyer les données, le serveur lui envoie un message qui
dirait "ok, continue", et le client lui renvoie une nouvelle fois les
données...