Discussion grâce à la classe Socket [Résolu]

ivanoff1 99 Messages postés lundi 14 octobre 2002Date d'inscription 28 décembre 2005 Dernière intervention - 10 janv. 2005 à 08:34 - Dernière réponse : MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 10 janv. 2005 à 09:05
3
Merci
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

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de MorpionMx
Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 10 janv. 2005 à 09:39
3
Merci
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

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de MorpionMx
ivanoff1 99 Messages postés lundi 14 octobre 2002Date d'inscription 28 décembre 2005 Dernière intervention - 10 janv. 2005 à 09:33
0
Merci
Merci beaucoup pour cette aide !!

Ivanoff, tres heureux
Commenter la réponse de ivanoff1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.