|
Dernière réponse | ||
---|---|---|
Sujet : [JAVA] Quelque difficulté à passer de C++ à Java | ||
Ventilo |
|
Aperçu |
---|
Vue Rapide de la discussion |
---|
Ventilo |
|
LeGreg | on se perd la.
LEGREG |
gfive | Bah déjà, j'imagine que y'a un identifiant pour chaque client...A ce moment là, une HashTable (ou une HashMAp) pour les gérer est très bien...Pour limiter le nombre de connections, c'est facile : avant d'en acepter une nouvelle, si hash est ta table de hashage qui gère les connections, tu fais : if (hash.size() < MAX_CON) { // Accepter la connection } else { // Refuser la connection } |
benou | je suis bien d'accord, mais bon, ca fait 2 lignes, faut pas trop demander non plus ! ;)
évidement, pour un vrai programme, il faut gérer les connections mieux que ca ... |
LeGreg |
|
hastur | Comme l'a dis darklord, le meilleure moyen est de faire une boucle sur un boolean et de mettre se boolean a false lorsque tu veux stopper le thread.
Cette methode n'appelera pas la fonction stop du thread, le thread se finira juste de maniere naturelle. Si tu veut faire un peu de nettoyage juste avant que le thread ne se termine tu peux le faire aprez la boucle : public void run { while(running) { /// } //c'est ici que tu fais ton nettoyage nettoyage(); } public void nettoyage() { ... } public void kill() { running = false; } |
gfive | Benou : Ouais, C'est exacteent ce que dit Dark! Et...Depuis que je fais des applets (jre 1.1.5), je passe mon temps à potasser la javadoc à la recherche des champs "since"....Par exemple, pour couper le début d'un StringBuffer, en jre 1.1.5.....C une horreur! Faut le retourner, couper la fin, et le reretourner.....C null!! bouhou! |
darklord | il veut dire sans le JRE (avec la JVM du browser qui n'est pas 1.3 |
Cherrytree |
|
darklord | c'est deprecated stop() |
Ventilo |
|
darklord | public void run {
while(!stopped) { /// } public void kill() { stopped = true; } } |
Ventilo | Je fais un serveur P2P (je suis à la mode :sol:) donc je dois garder une liste des clients pour pouvoir broadcaster des événement: chat/anoncement etc...
J'ai un petit problème avec les thread justement, ILS NE SE FERMENT JAMAIS :fou: J'ai regarder dans les tutorials de SUN mais je suis pas capable de totalement les terminer!! La classe n'est jamais == null, la je comprend vraiment pas pourquoi :( la fonction stop() de mon thread n'est jamais appeller!! Vous auriez pas une techniques fiable? |
gfive | Benou : pas toujours : pour les applets, on peut pas utiliser l'ArrayList!! Bouhou! |
darklord | oui juste puisque ce sont des clients. My mistake :( |
benou |
|
darklord | il veut peut etre garder une ref sur ces clients pour faire des stats ou d'autres choses dans ce gout là.
Mais le tableau n'est pas la bonne structure pour cette utilisation. essaie plutot avec un Vecteur (meme si c'est pas ce qu'il y a de plus efficient) |
benou |
|
darklord | bin tu dois pas mettre ca dans un tableau en tout cas puisque tu ne connais pas le nombre de client à la base ... |
Ventilo | Un Client est un Thread, donc en gros mon program est une boucle qui attend des conexion pendant que chaque client est géré par un thread... C'est pas ca qui faut faire?? |
darklord |
|
benou | pkoi créer un tableau de client ???
à chaque appel de accept() l'execution va être bloquée... Ce qu'il faut faire c'est une boucle qui "accepte" les connection, et qui créé un nouveau thread pour chaque connection d'un client |
Ventilo |
[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo] |
matafan | On on dit « Client[] clients = new Client[100] » , pas Client « Clients[100] = new Client(serversocket.accept) » (ce qui est d'ailleurs incorrect, tu as un Array gauche et un Client à droite).
Ensuite seulement tu instancies tes Client : « clients[i] = new Client(serversocket.accept) ». [jfdsdjhfuetppo]--Message édité par Matafan--[/jfdsdjhfuetppo] |
Ventilo | Je vais expliquer ce que je veux faire:
J'ai une classe Client qui est apeu près comme ca:
, donc je ne peut pas faire
parce qu'il essaie de me crée 100 clients sur le même socket :crazy:
[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo] |
benou |
|
darklord |
|
Cherrytree | :D |
gfive | hahaha!!! Et toceuuuuh!!! :D:D:D
Merci Benou! |
benou |
|
darklord | prems :D [jfdsdjhfuetppo]--Message édité par DarkLord--[/jfdsdjhfuetppo] |
gfive | Une semaine de vacances, j'ai perdu la main! bouhou!! :D |
gfive | bah.....
Client[] tableau = new Client[100]; et c'est tout..... Sinon, avec un vecteur, il te retourne un objet car la propriété d'un vecteur est de contenir des objets de type différent...Si tu sais que tu n'as mis QUE des instances de la classe Client dedans, un cast suffit à récupérer un objet Client : Client client = (Client) vecteur.get(i); Si tu veux vraiment blinder le tout, tu faisd ça : try { Client client = (Client) vecteur.get(i); } catch (ClassCastException cce) { System.err.println("Grosse quiche, je veux des object Client dans mon vecteur!" ); } :D |
darklord |
|
Ventilo | Voilà je veux crée une array de 100 items, mais ne pas les instanciers automatiquement. en C++ je fais quelquechose du genre:
[jfdsdjhfuetppo]--Message édité par Ventilo--[/jfdsdjhfuetppo] |