Java - Classe Socket avec Exemples
Bonjour, futurs programmeurs Java ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde du programmement réseau en utilisant la classe Socket de Java. En tant que votre professeur de science informatique bien-aimé, je suis ravi de vous guider à travers cette aventure. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - nous allons commencer par les bases et progresser pas à pas. Alors, mettez vos casques virtuels, et plongeons dedans !
Qu'est-ce qu'un Socket ?
Avant de plonger dans le code, comprens ce qu'est un socket. Imaginez que vous essayez d'appeler votre ami au téléphone. Vous avez besoin de deux choses : le numéro de téléphone de votre ami et un téléphone pour passer l'appel. En réseautage informatique, un socket est comme ce téléphone - c'est le point de terminaison d'un lien de communication bidirectionnel entre deux programmes s'exécutant sur un réseau.
Classe Socket en Java
La classe Socket de Java représente un socket côté client. Elle fait partie du paquet java.net et offre un moyen pour les programmes de communiquer avec d'autres programmes sur un réseau.
Déclaration
Pour utiliser la classe Socket, vous devez d'abord l'importer :
import java.net.Socket;
Constructeurs
La classe Socket a plusieurs constructeurs. Voici les plus couramment utilisés :
Constructeur | Description |
---|---|
Socket() | Crée un socket non connecté |
Socket(String host, int port) | Crée un socket et le connecte à l'hôte et au port spécifiés |
Socket(InetAddress address, int port) | Crée un socket et le connecte à l'adresse IP et au port spécifiés |
Méthodes
La classe Socket offre diverses méthodes pour gérer les connexions et transférer des données. Voici quelques-unes des plus importantes :
Méthode | Description |
---|---|
connect(SocketAddress endpoint) | Connecte ce socket au serveur |
getInputStream() | Retourne un flux d'entrée pour lire des octets à partir de ce socket |
getOutputStream() | Retourne un flux de sortie pour écrire des octets dans ce socket |
close() | Ferme ce socket |
isClosed() | Retourne si le socket est fermé ou non |
isConnected() | Retourne si le socket est connecté ou non |
Exemple de Client Socket
Maintenant, créons un client simple qui se connecte à un serveur et envoie un message. Ne vous inquiétez pas si vous ne comprenez pas tout de suite - nous allons le décomposer étape par étape.
import java.io.*;
import java.net.*;
public class SimpleSocketClient {
public static void main(String[] args) {
try {
// Créer un socket et se connecter au serveur
Socket socket = new Socket("localhost", 12345);
System.out.println("Connecté au serveur !");
// Créer un flux de sortie pour envoyer des données au serveur
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// Envoyer un message au serveur
out.println("Bonjour, Serveur ! Voici un message du client.");
// Créer un flux d'entrée pour recevoir des données du serveur
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Lire la réponse du serveur
String response = in.readLine();
System.out.println("Le serveur dit : " + response);
// Fermer les connexions
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Décomposons cela :
-
Nous commençons par importer les classes nécessaires pour les opérations d'entrée/sortie et le réseautage.
-
Dans la méthode
main
, nous enveloppons notre code dans un bloc try-catch pour gérer les potentielsIOException
s. -
Nous créons un nouvel objet
Socket
, spécifiant l'adresse du serveur ("localhost" dans ce cas, ce qui signifie la même machine) et le numéro de port (12345). -
Nous créons un
PrintWriter
pour envoyer des données au serveur via le flux de sortie du socket. -
Nous envoyons un message au serveur en utilisant la méthode
println
. -
Nous créons un
BufferedReader
pour recevoir des données du serveur via le flux d'entrée du socket. -
Nous lisons la réponse du serveur en utilisant la méthode
readLine
et l'affichons. -
Enfin, nous fermons tous les flux et le socket pour libérer les ressources.
Maintenant, vous vous demandez peut-être : "Mais attendez, où est le serveur ?" Excellent question ! Pour que ce client fonctionne, nous avons besoin d'un serveur en écoute sur le même port. Créons un serveur simple pour compléter notre exemple.
import java.io.*;
import java.net.*;
public class SimpleSocketServer {
public static void main(String[] args) {
try {
// Créer un socket serveur
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Le serveur attend le client...");
// Attendre qu'un client se connecte
Socket clientSocket = serverSocket.accept();
System.out.println("Client connecté !");
// Créer un flux d'entrée pour recevoir des données du client
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// Créer un flux de sortie pour envoyer des données au client
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// Lire le message du client
String message = in.readLine();
System.out.println("Le client dit : " + message);
// Envoyer une réponse au client
out.println("Message reçu, merci !");
// Fermer les connexions
in.close();
out.close();
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ce code du serveur fait ce qui suit :
- Crée un
ServerSocket
sur le port 12345. - Attend qu'un client se connecte en utilisant la méthode
accept
. - Une fois qu'un client se connecte, il crée des flux d'entrée et de sortie.
- Lit le message du client et l'affiche.
- Envoie une réponse au client.
- Ferme toutes les connexions.
Pour exécuter cet exemple :
- D'abord, exécutez la classe
SimpleSocketServer
. - Ensuite, exécutez la classe
SimpleSocketClient
.
Vous devriez voir le client se connecter au serveur, envoyer un message et recevoir une réponse !
Conclusion
Félicitations ! Vous venez de créer votre première application client-serveur en utilisant les sockets Java. Cela n'est que la pointe de l'iceberg en matière de programmation réseau, mais c'est un excellent début.
Souvenez-vous, les sockets sont comme des téléphones - ils permettent aux programmes de communiquer entre eux sur un réseau. Avec cette connaissance, vous pouvez commencer à construire des applications réseaux plus complexes, comme des programmes de chat, des jeux multijoueurs ou des systèmes distribués.
Alors continuez à pratiquer, restez curieux, et bon codage !
Credits: Image by storyset