question sur les sockets .... [Sockets] - Java - Programmation
Marsh Posté le 21-12-2004 à 11:04:32
une socket ca communique dans les 2 sens => à moins que tu ais besoin de faire de l'envoi/reception en paralèlle (assez rare dans un protocol réseau) ca n'a aucun intérêt d'avoir 2 socket ou même 2 thread ...
Le serveur est un thread qui attend les connection. quand il en reçoit une, il démarre un thread en lui passant la socket et le thread hère la communication (dans les 2 sens) avec le client.
Tu prends n'importe quel tuto sur la prog réseau en java et tu auras des exemples et des explications ...
Marsh Posté le 21-12-2004 à 11:09:01
Mais n'oublie pas qu'il te faut une licence pour pouvoir faire un client MSN Messenger
Marsh Posté le 21-12-2004 à 11:33:54
Tout d'abord, merci pour ta réponse.
benou a écrit : Tu prends n'importe quel tuto sur la prog réseau en java et tu auras des exemples et des explications ... |
Justement, j'ai consulté un bouquin ("OReilly, Java network Programming" ) et dans leur serveur test (pages 337, 338, 339) ils créent bien 2 threads (un thread d'emission et un thread de reception) qui utilise la meme socket. Dans le doute, j'ai demandé a mon prof de java, qui m'a répondu que "J'en pense que si tu veux tout faire avec un seul thread tu vas avoir des soucis de téléscopage de trames qui son solubles mais qui compliquent un peu les choses ...
Puisqu'on peut créer plusieurs threads...."
texto...
donc bon, vala vala... Je pense que je vais au final créer 2 threads qui agissent sur la meme socket... ca me semble bien...
merci encore!
gian
Marsh Posté le 21-12-2004 à 13:55:14
ben moi ca me semble mal ...
et je vois aucun rapport entre le fait d'avoir un threads et du téléscopage de trame ... de toute façon, t'es en TCP => tu ne peux pas avoir (ou en tout cas savoir qu'il y a eu) téléscopage. T'es sûr qu'il y connait quelque chose ton prof ?
T'as définis un protocole réseau non ? c'est sous forme de QR (question-réponse) ? si oui, bon courrage avec tes 2 threads
edit: remarque, le mode QR pour un truc d'instant messaging c'est pas forcément adapté ...
Marsh Posté le 21-12-2004 à 14:09:03
bein c'est très bien au moins deux threads pour traiter une connection tcp/ip, une pour recevoir et une autre pour envoyer
Marsh Posté le 21-12-2004 à 14:15:48
schnapsmann a écrit : bein c'est très bien au moins deux threads pour traiter une connection tcp/ip, une pour recevoir et une autre pour envoyer |
génaralement tu as un thread qui écoute, effectivement, mais celui qui envoie c'est soit celui qui écoute (réponse à une intérogation), soit le thread global de l'application (le thread principal du serveur, ou l'IHM du client).
Je vois pas l'intérêt d'utiliser un autre thread pour envoyer ... à part pour le serveur pour paralléliser les envois, mais ca me parait pas vraiment utile pour de l'IM...
Marsh Posté le 21-12-2004 à 14:17:42
question : dans le cas où t'as 2 threads, il fait quoi ton thread d'envoi dans le cas général où y a encore rien à envoyer ?
Marsh Posté le 21-12-2004 à 14:25:37
benou a écrit : question : dans le cas où t'as 2 threads, il fait quoi ton thread d'envoi dans le cas général où y a encore rien à envoyer ? |
déjà le thread en réception, il bloque la plupart du temps en lecture; quant au thread d'envoi, pour une petite impl on peut l'almagamer au thread de traitement principal...
Marsh Posté le 21-12-2004 à 14:29:16
schnapsmann a écrit : déjà le thread en réception, il bloque la plupart du temps en lecture; quant au thread d'envoi, pour une petite impl on peut l'almagamer au thread de traitement principal... |
on est d'accord donc
Marsh Posté le 21-12-2004 à 14:30:51
FlorentG a écrit : Il attend qu'on lui file quelque chose à envoyer... |
bha ouais. T'avoueras que c'est pas top l'intérêt d'un thread par utilisateur qui est en pause 95% du temps ...
Marsh Posté le 21-12-2004 à 14:33:30
oua merci les keums,
je vais debattre de ca avec mon binome puis avec mon prof.
Gian
Marsh Posté le 22-12-2004 à 00:13:50
FlorentG a écrit : Mais n'oublie pas qu'il te faut une licence pour pouvoir faire un client MSN Messenger |
l'embrouille pas toi
personne l'a cette fichu licence qui plus est
Marsh Posté le 22-12-2004 à 11:14:27
J'ai un probleme avec les Threads, je n'arrive pas à les stocker dans un vecteur. Meme en regardant l'aide de l'API a cette adresse http://java.sun.com/developer/tech [...] rcode.html
ca ne marche pas et j'ai une erreur nullpointerexception quand j'affiche le vecteur alors que si j'affiche le thread ca marche.
Merci de vos reponses.
Gian
Marsh Posté le 22-12-2004 à 11:19:55
sans code ni stacktrace ou pourra pas t'aider.
et les nullpointerexception, c'est des erreurs con => en cherchant un peu tout seul tu vas la trouver ta variable que t'as pas initialisée ...
Marsh Posté le 22-12-2004 à 11:25:18
Voici mon code:
Code :
|
et voici l'erreur avec printstacktrace:
Code :
|
Marsh Posté le 22-12-2004 à 11:27:21
ReplyMarsh Posté le 22-12-2004 à 11:29:52
On est trop une bite, on a pas fait de new Vector().
Cimer Benou
Marsh Posté le 23-12-2004 à 15:31:46
resalut a tous,
alors la je dois avouer que ca commence à tourner doucemement. Pour gérer les connexions j'ai parcouru un peu le forum et je me suis mis a faire un watchdog.
Ce watchdog qui utilise les sockets d'entrée et de sortie établies entre le server et le client pour véhiculer des messages particulier qui lui permettent de savoir si le client est connecté.
Donc voici le code :
Code :
|
et une boucle dans le thread qui traite la connexion avec le client :
Code :
|
Ensuite je fais un writeObject dans le threadserveur vers le client
sortie.writeObject(...);
Du coté client on a :
Code :
|
et ensuite la méthode PingPong renvoit une réponse dans le cas ou un message de type watchdog à été recu par le client :
Code :
|
De retour du coté threadserveur, on recupere le pingpong du client :
Code :
|
Donc le watchdog est interrompu et ca recommence. Sachant qu'entre temps on a des messages qui circulent sur la socket entre le serveur et le client.
A la compil pas de problemes, et a l'execution coté client on a :
Code :
|
Il faut savoir que le programme tourne tres bien sans le watchdog, donc s'agit-il d'une erreur de synchronization de trames (aucun synchronized n'est présent dans le programme) ou bien une erreur a la con comme on sait si bien les faire.
merci a ceux qui peuvent me filer un coup de main,
si vous avez besoin de plus de precisions n'hesitez pas...
Giansolo
Marsh Posté le 20-12-2004 à 21:41:15
salut a tous,
une petite question de conception en java au niveau des sockets :
je suis en train de créer l'équivalent d'un MSN messenger en java avec un coté serveur et un coté client.
les clients se connectent au serveur en utilisant des sockets et des threads... tout va bien.
Ma question est :
Si dans les 2 thread (l'un d'envoi et l'autre de reception) on utilise les 2 mêmes sockets avec le même port ou bien on doit utiliser 2 ports differents ?
Est-ce que ca peut améliorer le flux si on a port pour les envois et un autre pour les receptions ?
merci d'avances au NetWork Masters...
giansolo