Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java – Réseautage

Le terme programmation réseau fait référence à l'écriture de programmes qui s'exécutent sur plusieurs appareils (ordinateurs), dans lesquels les appareils sont tous connectés les uns aux autres à l'aide d'un réseau.

Le package java.net des API J2SE contient une collection de classes et d'interfaces qui fournissent les détails de communication de bas niveau, vous permettant d'écrire des programmes qui se concentrent sur la résolution du problème en cours.

Le package java.net prend en charge les deux protocoles réseau courants −

Ce chapitre permet de bien comprendre les deux sujets suivants −

Programmation des sockets

Les sockets fournissent le mécanisme de communication entre deux ordinateurs utilisant TCP. Un programme client crée un socket à son extrémité de la communication et tente de connecter ce socket à un serveur.

Lorsque la connexion est établie, le serveur crée un objet socket à son extrémité de la communication. Le client et le serveur peuvent maintenant communiquer en écrivant et en lisant depuis le socket.

La classe java.net.Socket représente un socket, et la classe java.net.ServerSocket fournit un mécanisme permettant au programme serveur d'écouter les clients et d'établir des connexions avec eux.

Les étapes suivantes se produisent lors de l'établissement d'une connexion TCP entre deux ordinateurs à l'aide de sockets −

Une fois les connexions établies, la communication peut se produire à l'aide de flux d'E/S. Chaque socket a à la fois un OutputStream et un InputStream. L'OutputStream du client est connecté à l'InputStream du serveur et l'InputStream du client est connecté à l'OutputStream du serveur.

TCP est un protocole de communication bidirectionnel, les données peuvent donc être envoyées sur les deux flux en même temps. Voici les classes utiles fournissant un ensemble complet de méthodes pour implémenter les sockets.

Méthodes de la classe ServerSocket

Le java.net.ServerSocket La classe est utilisée par les applications serveur pour obtenir un port et écouter les requêtes des clients.

La classe ServerSocket a quatre constructeurs −

public ServerSocket(int port) lève IOException

Tente de créer un socket serveur lié au port spécifié. Une exception se produit si le port est déjà lié à une autre application.

public ServerSocket(int port, int backlog) lève IOException

Semblable au constructeur précédent, le paramètre backlog spécifie le nombre de clients entrants à stocker dans une file d'attente.

public ServerSocket(int port, int backlog, InetAddress address) lance IOException

Semblable au constructeur précédent, le paramètre InetAddress spécifie l'adresse IP locale à laquelle se lier. L'InetAddress est utilisé pour les serveurs qui peuvent avoir plusieurs adresses IP, permettant au serveur de spécifier sur laquelle de ses adresses IP accepter les demandes des clients.

public ServerSocket() lève IOException

Crée un socket de serveur non lié. Lorsque vous utilisez ce constructeur, utilisez la méthode bind() lorsque vous êtes prêt à lier le socket du serveur.

Sr.No. Méthode et description
1
2
3
4

Si le constructeur ServerSocket ne lève pas d'exception, cela signifie que votre application s'est liée avec succès au port spécifié et est prête pour les requêtes client.

Voici quelques-unes des méthodes courantes de la classe ServerSocket −

public int getLocalPort()

Renvoie le port sur lequel le socket du serveur écoute. Cette méthode est utile si vous avez passé 0 comme numéro de port dans un constructeur et laissé le serveur trouver un port pour vous.

public Socket accept() lève IOException

Attend un client entrant. Cette méthode bloque jusqu'à ce qu'un client se connecte au serveur sur le port spécifié ou que le socket expire, en supposant que la valeur du délai d'attente a été définie à l'aide de la méthode setSoTimeout(). Sinon, cette méthode se bloque indéfiniment.

public void setSoTimeout(int timeout)

Définit la valeur du délai d'attente pendant laquelle le socket du serveur attend un client lors de l'accept().

public void bind (hôte SocketAddress, int backlog)

Lie le socket au serveur et au port spécifiés dans l'objet SocketAddress. Utilisez cette méthode si vous avez instancié le ServerSocket à l'aide du constructeur sans argument.

Sr.No. Méthode et description
1
2
3
4

Lorsque le ServerSocket appelle accept(), la méthode ne revient pas tant qu'un client ne se connecte pas. Une fois qu'un client s'est connecté, le ServerSocket crée un nouveau Socket sur un port non spécifié et renvoie une référence à ce nouveau Socket. Une connexion TCP existe maintenant entre le client et le serveur, et la communication peut commencer.

Méthodes de classe de socket

Le java.net.Socket La classe représente le socket que le client et le serveur utilisent pour communiquer entre eux. Le client obtient un objet Socket en en instanciant un, tandis que le serveur obtient un objet Socket à partir de la valeur de retour de la méthode accept().

La classe Socket a cinq constructeurs qu'un client utilise pour se connecter à un serveur −

Public Socket(String host, int port) lance UnknownHostException, IOException.

Cette méthode tente de se connecter au serveur spécifié sur le port spécifié. Si ce constructeur ne lève pas d'exception, la connexion est réussie et le client est connecté au serveur.

Public Socket (hôte InetAddress, port int) lance IOException

Cette méthode est identique au constructeur précédent, sauf que l'hôte est désigné par un objet InetAddress.

public Socket(String host, int port, InetAddress localAddress, int localPort) lève IOException.

Se connecte à l'hôte et au port spécifiés, créant un socket sur l'hôte local à l'adresse et au port spécifiés.

public Socket (InetAddress host, int port, InetAddress localAddress, int localPort) lève IOException.

Cette méthode est identique au constructeur précédent, sauf que l'hôte est désigné par un objet InetAddress au lieu d'une chaîne.

prise publique()

Crée un socket non connecté. Utilisez la méthode connect() pour connecter ce socket à un serveur.

Sr.No. Méthode et description
1
2
3
4
5

Lorsque le constructeur Socket revient, il n'instancie pas simplement un objet Socket, mais il tente en fait de se connecter au serveur et au port spécifiés.

Certaines méthodes intéressantes de la classe Socket sont répertoriées ici. Notez que le client et le serveur ont tous deux un objet Socket, de sorte que ces méthodes peuvent être invoquées à la fois par le client et le serveur.

public void connect(SocketAddress host, int timeout) lance IOException

Cette méthode connecte le socket à l'hôte spécifié. Cette méthode n'est nécessaire que lorsque vous instanciez le Socket à l'aide du constructeur sans argument.

public InetAddress getInetAddress()

Cette méthode renvoie l'adresse de l'autre ordinateur auquel cette socket est connectée.

public int getPort()

Renvoie le port auquel le socket est lié sur la machine distante.

public int getLocalPort()

Renvoie le port auquel le socket est lié sur la machine locale.

public SocketAddress getRemoteSocketAddress()

Renvoie l'adresse du socket distant.

public InputStream getInputStream() lève IOException

Renvoie le flux d'entrée du socket. Le flux d'entrée est connecté au flux de sortie de la prise distante.

public OutputStream getOutputStream() lève IOException

Renvoie le flux de sortie du socket. Le flux de sortie est connecté au flux d'entrée de la prise distante.

public void close() lève IOException

Ferme le socket, ce qui rend cet objet Socket incapable de se reconnecter à un serveur.

Sr.No. Méthode et description
1
2
3
4
5
6
7
8

Méthodes de la classe InetAddress

Cette classe représente une adresse IP (Internet Protocol). Voici les méthodes utiles suivantes dont vous auriez besoin lors de la programmation de socket −

statique InetAddress getByAddress(byte[] addr)

Renvoie un objet InetAddress en fonction de l'adresse IP brute.

statique InetAddress getByAddress (chaîne hôte, octet [] adresse)

Crée une InetAddress basée sur le nom d'hôte et l'adresse IP fournis.

getByName d'InetAddress statique (hôte de chaîne)

Détermine l'adresse IP d'un hôte, étant donné le nom de l'hôte.

Chaîne getHostAddress()

Renvoie la chaîne d'adresse IP sous forme de présentation textuelle.

Chaîne getHostName()

Obtient le nom d'hôte pour cette adresse IP.

statique InetAddress InetAddress getLocalHost()

Renvoie l'hôte local.

Chaîne àChaîne()

Convertit cette adresse IP en chaîne.

Sr.No. Méthode et description
1
2
3
4
5
6
7

Exemple de client de socket

Le GreetingClient suivant est un programme client qui se connecte à un serveur à l'aide d'un socket et envoie un message d'accueil, puis attend une réponse.

Exemple

// File Name GreetingClient.java
import java.net.*;
import java.io.*;

public class GreetingClient {

   public static void main(String [] args) {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try {
         System.out.println("Connecting to " + serverName + " on port " + port);
         Socket client = new Socket(serverName, port);
         
         System.out.println("Just connected to " + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         
         out.writeUTF("Hello from " + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in = new DataInputStream(inFromServer);
         
         System.out.println("Server says " + in.readUTF());
         client.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Exemple de serveur de socket

Le programme GreetingServer suivant est un exemple d'application serveur qui utilise la classe Socket pour écouter les clients sur un numéro de port spécifié par un argument de ligne de commande −

Exemple

// File Name GreetingServer.java
import java.net.*;
import java.io.*;

public class GreetingServer extends Thread {
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run() {
      while(true) {
         try {
            System.out.println("Waiting for client on port " + 
               serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            
            System.out.println("Just connected to " + server.getRemoteSocketAddress());
            DataInputStream in = new DataInputStream(server.getInputStream());
            
            System.out.println(in.readUTF());
            DataOutputStream out = new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
               + "\nGoodbye!");
            server.close();
            
         } catch (SocketTimeoutException s) {
            System.out.println("Socket timed out!");
            break;
         } catch (IOException e) {
            e.printStackTrace();
            break;
         }
      }
   }
   
   public static void main(String [] args) {
      int port = Integer.parseInt(args[0]);
      try {
         Thread t = new GreetingServer(port);
         t.start();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Compilez le client et le serveur puis démarrez le serveur comme suit −

$ java GreetingServer 6066
Waiting for client on port 6066...

Vérifiez le programme client comme suit −

Sortie

$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!

Java

  1. Opérateurs Java
  2. Commentaires Java
  3. Java pour chaque boucle
  4. Chaînes Java
  5. InterfaceJava
  6. Classe anonyme Java
  7. Java essayer avec des ressources
  8. Annotations Java
  9. Assertions Java