Discussion grâce à la classe Socket

Résolu
ivanoff1 Messages postés 99 Date d'inscription lundi 14 octobre 2002 Statut Membre Dernière intervention 28 décembre 2005 - 10 janv. 2005 à 08:34
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 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...

Ivanoff, inquiet

3 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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...



Bon courage.

Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
10 janv. 2005 à 09:39
Il n'y a pas de quoi.

Apres tu peux faire des ajouts a ta sauce.



Genre un Thread qui s'occupe a un instant T de vérifier si tous les clients sont toujours connectés,

Un Thread qui gère les envois de données, etc.



Mx
3
ivanoff1 Messages postés 99 Date d'inscription lundi 14 octobre 2002 Statut Membre Dernière intervention 28 décembre 2005
10 janv. 2005 à 09:33
Merci beaucoup pour cette aide !!

Ivanoff, tres heureux
0
Rejoignez-nous