CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Est on obligé de fermer les sockets ?

TintinPhilippot
TintinPhilippot
Niveau 9
25 juillet 2015 à 00:39:48

Bonjour, je suis actuellement un tuto sur openclassroom sur les sockets afin de réaliser un petit tchat pour m'exercer et progresser dans la programmation en Java.
Il est dit dans le tuto qu'il est nécessaire de fermer les sockets afin que ça ne viens pas embêter un autre programme utilisant le même port, or un peu plus bas dans le tuto je vois un bout de code et à aucun moment le serversocket n'est fermé.


public class Serveur {

	public static void main(String[] zero){
		
		ServerSocket socket;
		try {
		socket = new ServerSocket(2009);
		Thread t = new Thread(new Accepter_clients(socket));
		t.start();
		System.out.println("Mes employeurs sont prêts !");
		
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
}

class Accepter_clients implements Runnable {

	   private ServerSocket socketserver;
	   private Socket socket;
	   private int nbrclient = 1;
		public Accepter_clients(ServerSocket s){
			socketserver = s;
		}
		
		public void run() {

	        try {
	        	while(true){
			  socket = socketserver.accept(); // Un client se connecte on l'accepte
	                  System.out.println("Le client numéro "+nbrclient+ " est connecté !");
	                  nbrclient++;
	                  socket.close();
	        	}
	        
	        } catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

Est ce volontaire ? Par curiosité et sans réfléchir j'ai testé de fermer le serversocket à la fin du try situé dans le main, évidemment ça crash étant donné que les thread travaillent "en parallèle ", donc ma question, est il nécessaire de le fermer ? si oui , où le fermer ?
Par avance merci :)

godrik
godrik
Niveau 30
25 juillet 2015 à 00:57:05

(DISCLAIMER: Je n'ai pas programmer serieusement de java depuis 10 ans.)

A la fin de la fonction run ca a l'air raisonnable.
Ce n'est pas obligatoire de fermer le serversocket. Mais ca permet de rendre la ressource au systeme d'exploitation au moment que tu le souhaites et pas au moment ou le GC passera.

Message édité le 25 juillet 2015 à 00:57:44 par godrik
TintinPhilippot
TintinPhilippot
Niveau 9
25 juillet 2015 à 01:28:36

Ah oui comme le GC passera à un moment ou à un autre, cela ne risque pas d'interférer avec un autre programme par la suite. Mais c'est plus "propre" de le fermer. Je comprend, merci pour cette réponse claire et rapide.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment