« Salut Amigo ! »

« Bonjour, Rishi ! »

"Le sujet de la leçon d'aujourd'hui est les prises."

"Vous savez déjà que chaque ordinateur du réseau a sa propre adresse IP unique."

"Ouais."

"Imaginez maintenant que vous avez plusieurs ordinateurs, chacun exécutant une douzaine de programmes qui accèdent à Internet : Skype, ICQ, etc."

"Et ces programmes veulent communiquer entre eux."

"Nous devons les empêcher d'interférer les uns avec les autres. Nous devons faire en sorte que Skype se connecte à Skype, Slack se connecte à Slack, etc."

"Vous vous souvenez comment ce problème a été résolu avec les URL et les serveurs Web ?"

"Ouais, nous avons ajouté des ports."

"Exactement."

"C'est comme faire un tas de petites pièces dans une maison et dire que la maison est un immeuble d'appartements. Chaque port est comme un appartement séparé. "

"Si une adresse IP est un identifiant unique pour un ordinateur, alors une adresse IP combinée à un port est un identifiant unique pour un certain" appartement "dans l'ordinateur, où un programme peut résider. "

"Cet emplacement unique s'appelle une prise ."

« Un socket possède son propre numéro unique composé d'une adresse IP et d'un numéro de port. »

"Ah. En d'autres termes, un socket est un identifiant pour un emplacement d'ordinateur virtuel où un programme peut résider ? Et un autre programme envoie des messages à cet emplacement, ce qui permet aux deux programmes de communiquer ?"

"Je ne sais pas comment tu as compris ça, mais c'est exactement ça."

"Mon sens robot me l'a dit."

"Génial. Alors laissez-moi vous donner quelques détails."

"Les sockets sont en fait le moyen le plus basique et le plus primitif pour les programmes de communiquer."

"Java a deux classes pour travailler avec les sockets. Ce sont Socket et ServerSocket ."

" ServerSocket est une classe spéciale dont les objets représentent le serveur, c'est-à-dire qu'ils me permettent de traiter les requêtes qui arrivent sur un socket particulier."

"La classe Socket est en fait un socket client. Nous l'utilisons pour envoyer des messages à un autre socket et recevoir les réponses."

"Voici comment envoyer un message à une socket :"

Exemple
// Create a socket
Socket clientSocket = new Socket("localhost", 4444);

// Get an OutputStream
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream, true);
out.println("Kiss my shiny metal ass!");
out.flush();

// Read the response
InputStream inputStream = clientSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String answer = in.readLine();

"C'est très similaire au téléchargement d'un fichier sur Internet."

"Cela, mon garçon, c'est parce que les douilles sont utilisées là aussi."

"Les sockets sont au cœur de tout ce qui est associé à un réseau - enfin, presque tout."

"Vous pouvez lire des informations supplémentaires ici "

"Merci pour la leçon, Rishi."

"Je n'ai pas encore fini. C'est un vœu pieux."

"Nous allons maintenant explorer le fonctionnement d'un socket de serveur."

"C'est un peu plus compliqué."

Exemple
// Create a server socket object
ServerSocket serverSocket = new ServerSocket(4444); // Port

// Process incoming connections in a loop
while (true)
{
 // The accept method waits for someone to connect
 Socket socket = serverSocket.accept();

 // Read the response
 InputStream inputStream = socket.getInputStream();
 BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
 String message = in.readLine();

 // Create a response - we'll just reverse the string
 String reverseMessage = new StringBuilder(message).reverse().toString();

 // Send the response
 OutputStream outputStream = socket.getOutputStream();
 PrintWriter out = new PrintWriter(outputStream, true);
 out.println(reverseMessage);
 out.flush();
}

"Je veux attirer votre attention sur quelques points."

"Point 1 : Pour créer un socket (client), vous devez spécifier une adresse IP (ou un nom de domaine) et un port. Pour créer un socket serveur, il vous suffit de spécifier un port. Le socket serveur n'existe que sur l'ordinateur où cela a été créé."

"Point 2 : La classe ServerSocket a une méthode accept() qui attend une connexion entrante. En d'autres termes, la méthode s'exécutera indéfiniment jusqu'à ce qu'un socket client tente de se connecter. Ensuite, la méthode accept() accepte la connexion, crée un socket objet pour permettre la communication, puis renvoie cet objet."

"Du point de vue d'un programmeur Java, un socket est constitué de deux flux : un InputStream à partir duquel vous lisez des messages/données et un OutputStream dans lequel vous écrivez des messages/données."

"Lorsque vous créez un socket serveur, vous créez en fait un port auquel les sockets clients d'autres ordinateurs peuvent se connecter. Mais pour ce faire, ils doivent spécifier correctement le numéro de port de notre socket et l'adresse IP de notre ordinateur. Eh bien, ou son nom de domaine."

"Voici un exemple intéressant pour vous. Vous pouvez essayer de creuser dedans et de l'exécuter :"

https://www.logicbig.com/tutorials/core-java-tutorial/http-server/http-server-basic.html

"Le but est d'utiliser un socket de serveur pour écrire un serveur Web super primitif auquel vous pouvez accéder simplement à partir d'un navigateur."

« Wow ! Un serveur web ? Cool ! Je vais l'étudier très attentivement.

"Merci, Rishi."

« C'est tout, Amigo. Va te détendre !