Programmation de socket en Java : un bref guide

Publié: 2022-05-21

En Java, la programmation par socket est un moyen de communiquer entre les programmes et de rester connecté à différents JRE - à la fois des serveurs orientés connexion et des serveurs non orientés connexion. Un socket de serveur Java est utilisé exclusivement pour initier et traiter la communication entre un serveur et un client.

Ce blog couvrira tout ce qu'il y a à savoir sur la programmation par socket.

Table des matières

Programmation de sockets en Java

La programmation de socket est le processus de complémentation et d'utilisation de nœuds de réseau séparés de manière interactive. Il s'agit d'un système de communication bidirectionnel dans lequel une prise (nœud) écoute sur un port spécifique à une adresse IP tandis que l'autre prise se connecte.

Sockets en Java

En Java, les sockets sont une extrémité d'un canal de communication bidirectionnel qui connecte deux programmes en réseau. La couche TCP est utilisée pour attribuer un numéro de port au socket Java donné afin d'identifier l'application à laquelle nous transférons des données. Nous utilisons la combinaison d'une adresse IP et d'un numéro de port pour créer un point de terminaison.

La plate-forme Java comprend une classe appelée Socket, qui implémente un côté d'une connexion réseau bidirectionnelle entre votre application Java et un autre programme. La classe se trouve au-dessus d'une implémentation indépendante de la plate-forme, protégeant votre programme Java des détails spécifiques au système.

En utilisant la classe au lieu d'un certain code natif, vos programmes Java peuvent communiquer sur le réseau d'une manière indépendante de la plate-forme.

De plus, java.net inclut la classe ServerSocket, qui implémente un socket que les serveurs peuvent utiliser pour écouter et accepter les connexions des clients. Ceci est un exemple qui montre comment utiliser les classes ServerSocket et Socket.

Entre le port côté client et le port côté serveur, une connexion est créée.

Établissement d'une connexion Java Socket [CÔTÉ CLIENT]

Avant de poursuivre la programmation côté client, le client doit attendre l'initialisation du serveur. Une fois opérationnel, il commencera à envoyer des requêtes au serveur Java. Le client attendra alors la réponse du serveur. C'est un bon résumé de la logique de connexion client-serveur.

Examinons plus en détail la programmation côté client.

Pour vous connecter à une autre machine, vous aurez besoin d'une connexion socket. Les deux ordinateurs doivent savoir où ils se trouvent sur le réseau (adresse IP) et quel port TCP ils utilisent pour établir une connexion socket. Le framework java.net désigne la classe socket.

L'adresse IP du serveur est le premier argument d'entrée. Le port TCP est le paramètre suivant ici. (Ce n'est rien de plus qu'un nombre qui indique quel programme doit être démarré sur un serveur.) HTTP, par exemple, utilise le port 80. Habituellement, la plage des numéros de port va de 0 à 65535.

Communication

Les flux sont utilisés pour l'entrée et la sortie de données lors de la communication via une connexion socket. Une fois que vous avez envoyé les requêtes et établi une connexion solide, vous devez désactiver la connexion socket.

Fermeture d'une connexion Java Server Socket

La connexion socket est explicitement fermée après l'envoi du message au serveur, la connexion socket est explicitement fermée.

// Programme de démonstration Java pour Clientele

importer java.net.* ;

importer java.io.* ;

classe publique Client_Side_Program

{

// pour initialiser les flux de socket, les flux d'entrée et les flux de sortie

Socket privé socket = null ;

entrée privée DataInputStream = null ;

flux de sortie de données privé out = null ;

// constructeur pour mettre le port TCP et l'adresse IP

Client public (ajout de chaîne, port int)

{

// établit une connexion

essayer

{

socket = new Socket(ajouter, port);

System.out.println("Connecté");

// prend l'entrée du terminal

input = new DataInputStream(System.in);

// envoie la sortie au socket

out = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

// chaîne pour lire le message depuis l'entrée

Ligne de chaîne = "" ;

// continuez à lire jusqu'à ce que "Over" soit entré

tandis que (!line.equals("Over"))

{

essayer

{

ligne = input.readLine();

out.writeUTF(ligne);

}

catch(IOException i)

{

System.out.println(i);

}

}

// ferme la connexion

essayer

{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

client client = nouveau Client("127.0.0.1", 5000);

}

}

Pour visiter la source de ce code, cliquez ici .

Établissement d'une connexion Java Socket [CÔTÉ SERVEUR]

Le serveur crée son objet et attend la requête du client en considérant la connexion côté socket du serveur Java. Le serveur interagira avec le client une fois la requête envoyée. Vous aurez besoin de deux sockets pour coder l'application côté serveur, qui est la suivante : lorsqu'un client crée un nouveau Socket(), un ServerSocket est créé pour attendre les demandes du client. Un socket simple peut être défini comme un programme qui initie une communication côté serveur avec le client. Vous pouvez communiquer les réponses avec le client en conséquence, une fois que vous obtenez le rapport de la connexion socket côté serveur Java.

Communication

Pour utiliser le socket pour envoyer la sortie, nous attendons généralement avec impatience l'utilisation de la méthode getOutputStream().

Fermeture d'une connexion Java Server Socket

Il est crucial de terminer la connexion en éteignant à la fois la prise et les flux d'entrée-sortie.

// Un programme java serveur

importer java.net.* ;

importer java.io.* ;

Serveur de classe publique

{

// initialise le socket et le flux d'entrée

Socket privé socket = null ;

serveur ServerSocket privé = null ;

Private DataInputStream in = null ;

// constructeur avec port

Serveur public (port int)

{

// attend une connexion après le démarrage d'un serveur

essayer

{

serveur = nouveau ServerSocket(port);

System.out.println("Serveur : démarré");

System.out.println("En attente de l'arrivée d'un client...");

socket = serveur. accepter();

System.out.println("Le client a été accepté");

// pour prendre l'entrée du socket client

in = new DataInputStream(

nouveau BufferedInputStream(socket.getInputStream()));

Ligne de chaîne = "" ;

// pour lire le message du client jusqu'à ce que "Over" soit envoyé

tandis que (!line.equals("Over"))

{

essayer

{

ligne = in.readUTF();

System.out.println(ligne);

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println("Closing connection");

// fermer la connexion

socket.close();

joindre();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

serveur serveur = nouveau serveur (5000);

}

}

Pour vérifier les détails de ce code, cliquez ici .

Vous pouvez d'abord exécuter le logiciel côté serveur après avoir configuré les extrémités client et serveur. Ensuite, vous devez exécuter le logiciel côté client et envoyer la demande. Le serveur réagira immédiatement lorsque la demande viendra du côté client.

Explorez nos cours populaires de génie logiciel

SL. Non Programmes de développement de logiciels
1 Master of Science en informatique de LJMU & IIITB Programme de certificat de cybersécurité Caltech CTME
2 Bootcamp de développement de la pile complète Programme PG dans Blockchain
3 Executive Post Graduate Program in Software Development - Spécialisation DevOps Voir tous les cours de génie logiciel

Terminal ou invite de commande en cours d'exécution

Pour lancer le terminal ou l'invite de commande, nous utiliserons les commandes suivantes. Pour commencer, nous allons créer deux fenêtres, l'une sera dédiée au serveur et l'autre au client.

  1. Laissez le programme serveur démarrer.

Serveur $java

  1. Ensuite, dans un autre terminal, lancez l'application Client en tant que,

client java $

Le logiciel affichera « Connecté » et « Client accepté » lorsque le serveur accepte le client.

  1. Dans la zone Client, vous pouvez alors commencer à saisir des messages. Voici un exemple d'entrée Client.

Salut! Il s'agit de ma première connexion de prise professionnelle.

Que le serveur obtient et affiche en même temps

Salut! Il s'agit de ma première connexion de prise professionnelle.

Plus de.

Fermeture de la connexion

Comme indiqué précédemment, l'envoi de "Over" met fin à la connexion entre le client et le serveur.

Lisez nos articles populaires liés au développement de logiciels

Comment implémenter l'abstraction de données en Java ? Qu'est-ce que la classe interne en Java ? Identificateurs Java : définition, syntaxe et exemples
Comprendre l'encapsulation dans OOPS avec des exemples Arguments de ligne de commande en C expliqués Top 10 des fonctionnalités et caractéristiques du cloud computing en 2022
Polymorphisme en Java : concepts, types, caractéristiques et exemples Packages en Java et comment les utiliser ? Tutoriel Git pour les débutants : Apprenez Git à partir de zéro

Conclusion

La programmation Java Socket est un outil essentiel qui utilise des API de socket pour établir la communication entre les applications client-serveur locales et distantes. Une bonne connaissance de la programmation des sockets peut améliorer les connexions aller-retour du serveur et du client.

Si vous souhaitez apprendre Java et maîtriser le développement full-stack, nous avons le cours à fort impact qu'il vous faut : le programme Executive PG d'upGrad en développement logiciel - Spécialisation en développement Full Stack .

Le programme de 13 mois de l'IIIT-B est conçu pour aider les étudiants à acquérir des compétences telles que les principes fondamentaux de l'informatique, les processus de développement de logiciels, les API backend et l'interface utilisateur Web interactive. Vous avez accès à un Bootcamp de transition de carrière logicielle à la fois pour les non-techniciens et les nouveaux codeurs pour perfectionner leurs compétences en programmation et le soutien de carrière à 360° d'upGrad.

Apprenez des cours de développement de logiciels en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Quels sont les avantages d'apprendre la programmation par socket Java ?

Les sockets peuvent être utilisés pour construire une application client-serveur, telle qu'un chat, d'un point de vue réseau. Les sockets sont implémentés au niveau de sécurité le plus élémentaire pour découvrir si les ports d'un système sont ouverts, s'il existe des programmes d'analyse de ports standard tels que Nmap et s'ils peuvent être utilisés à un niveau bas. Ils peuvent être utilisés de la même manière que la commande SSH - Secure Socket Shell peut être utilisée pour se connecter à un serveur externe via un reverse shell.

Que fait la fonction accepter ?

La fonction accept attend qu'un client se connecte au serveur en bloquant d'y rester jusqu'à ce qu'un argument arrive. Ensuite, nous utilisons la fonction getInputStream pour obtenir l'entrée du socket. Le serveur est conçu de telle sorte qu'il continue à accepter les messages envoyés jusqu'à ce que la commande Over soit reçue.

Pourquoi les threads sont-ils utilisés dans la programmation réseau ?

Nous voulons que plusieurs clients se joignent en même temps. Nous devons donc utiliser des threads côté serveur afin qu'un thread différent puisse gérer chaque demande client. Supposons une situation où deux requêtes arrivent simultanément sur le serveur. Comme aucune méthode pour traiter plusieurs requêtes simultanément n'est donnée dans notre simple application serveur-client, la requête qui arrive ne serait-ce qu'une nanoseconde en avance pourra se connecter au serveur, tandis que l'autre requête sera refusée.