Latest web development tutorials

Programmation Java Network

La programmation réseau signifie pour écrire terme sur plusieurs périphériques programme (d'ordinateur), ces appareils sont connectés via un réseau.

package java.net dans l'API J2SE contient des classes et interfaces qui fournissent des détails de communication de bas niveau. Vous pouvez utiliser ces classes et interfaces pour se concentrer sur la résolution du problème, plutôt que de se concentrer sur les détails de la communication.

package java.net fournit un support pour deux protocoles réseau communs:

  • TCP: TCP est l'abréviation de Transmission Control Protocol, ce qui garantit une communication fiable entre les deux applications. Couramment utilisé pour le protocole Internet, appelé TCP / IP.
  • UDP: UDP est une abréviation de User Datagram Protocol, un protocole sans connexion. Fournir le paquet de données à transmettre entre les données d'application.

Ce tutoriel explique les deux sujets suivants.

  • Programmation Socket: Ceci est le concept de réseau le plus largement utilisé, il a été expliqué en détail à
  • Traitement des URL: Ce chapitre a parlé dans un autre espace, cliquez ici pour en savoir plus sur la manipulation du langage Java URL .

Programmation Socket

Douilles utilisent le protocole TCP fournit un mécanisme de communication entre les deux ordinateurs. programme client crée un socket et d'essayer de se connecter au socket serveur.

Lorsque la connexion est établie, le serveur va créer un objet Socket. Client et serveur peuvent maintenant lire et à écrire l'objet Socket pour communiquer.

classe java.net.Socket représente une prise, et fournit une classe java.net.ServerSocket pour écouter le programme client-serveur, et mettre en place un mécanisme permettant de communiquer avec eux.

Elle se produit lorsque la connexion TCP en utilisant les étapes suivantes pour établir une prise entre deux ordinateurs:

  • serveur ServerSocket instancier un objet qui représente le port de communication sur le serveur.
  • appels de serveur de classe ServerSocket acceptent la méthode (), qui va attendre jusqu'à ce qu'un client se connecte au serveur sur un port donné.
  • Lorsque le serveur est en attente d'un client pour instancier un objet Socket, indiquez le nom du serveur et le numéro de port pour demander une connexion.
  • constructeur de la classe Socket essaie de se connecter le client au numéro de serveur et le port spécifié. Si la communication est établie, pour créer un client de l'objet Socket peut communiquer avec le serveur.
  • Méthode Du côté du serveur, accept () retourne une nouvelle référence de serveur socket à la prise connectée à la prise de client.

Après la connexion est établie en utilisant le courant I / O pendant les communications. Chaque prise a une entrée et un flux de flux de sortie. entrée client flux de sortie de flux vers un serveur, le flux d'entrée du client dans le flux de sortie du serveur.

TCP est un protocole de communication bidirectionnel, afin que les données peuvent être envoyées par les deux flux de données en même temps. Ce qui suit est une classe complète fournit plusieurs méthodes utiles pour réaliser des prises.


méthodes de la classe ServerSocket

Les applications serveur en utilisant la classe java.net.ServerSocket pour un port et écoute les demandes des clients.

classe ServerSocket a quatre constructeurs:

Non . Méthode description
1 ServerSocket publique (int Port) throws IOException
Créer une liaison à un port spécifique du socket serveur.
2 ServerSocket publique (int port, int backlog ) throws IOException
Avec le carnet de commandes spécifié Crée un socket serveur et se lie au numéro de port local spécifié.
3 ServerSocket publique (int port, int backlog , InetAddress adresse) throws IOException
En utilisant le port spécifié, écouter arriéré, et de se lier à l'adresse IP locale du serveur est créé.
4 ServerSocket publique () throws IOException
Crée un socket serveur non lié.

Crée un socket serveur non lié. Si la méthode constructeur de ServerSocket ne jette pas une exception, cela signifie que votre demande a été lié avec succès au port spécifié, et l'écoute des demandes des clients.

Voici quelques-unes des méthodes de classe ServerSocket commune:

Non . Méthode description
1 public int getLocalPort ()
Retourne le port sur lequel ce socket est à l'écoute.
2 Socket publique accept () throws IOException
Il écoute et accepte cette prise.
3 setSoTimeout public void (int timeout)
En spécifiant la valeur de délai d'attente pour activer / désactiver SO_TIMEOUT, en millisecondes.
4 bind public void (SocketAddress hôte, int backlog)
Associe le ServerSocket à une adresse spécifique (adresse IP et numéro de port).

méthodes de la classe Socket

java.net.Socket nom de classe du client et un serveur pour communiquer avec l'autre dans la douille. Pour obtenir un objet Socket client par instanciation et le serveur pour obtenir un objet Socket est retourné par valeur méthode accept ().

classe Socket a cinq constructeurs.

Non . Méthode description
1 Socket publique (hôte String, int le port ) throws UnknownHostException, IOException.
Crée une prise de courant et se connecte au numéro de port spécifié sur l'hôte spécifié.
2 Socket publique (InetAddress hôte, le port int ) throws IOException
Crée une prise de courant et se connecte à l'adresse IP spécifiée du numéro de port spécifié.
3 Socket publique (String hôte, int le port , InetAddress localAddress, int localPort) throws IOException.
Crée une socket et se connecte au port distant spécifié sur l'hôte distant spécifié.
4 Socket publique (InetAddress hôte, int Port , InetAddress localAddress, int localPort) throws IOException.
Crée une socket et se connecte au port distant spécifié sur l'adresse distante spécifiée.
5 Socket publique ()
Créer un socket non connecté, le type par défaut du système SocketImpl

Au retour du constructeur de Socket, et non pas simplement instancier un objet Socket, il va vraiment essayer de se connecter au serveur et le port spécifié.

Voici quelques méthodes d'intérêt, faites attention au client et le serveur a un objet Socket, quel que soit le client ou le serveur peut appeler ces méthodes.

Non . Méthode description
1 public void connect (SocketAddress hôte, int timeout) throws IOException
Cette connexion de socket sur le serveur, et spécifier une valeur de délai d'attente.
2 publique InetAddress getInetAddress ()
L'adresse de retour de la connexion de socket.
3 public int getPort ()
Retours ce socket est connecté au port distant.
4 public int getLocalPort ()
Retours ce socket est lié à un port local.
5 publique SocketAddress getRemoteSocketAddress ()
L'adresse du point d'extrémité de retour ce socket est connecté, si elle est retourne sans lien null.
6 publique InputStream getInputStream () throws IOException
Renvoie un flux d'entrée pour cette prise.
7 publique OutputStream getOutputStream () throws IOException
Retourne un flux de sortie pour cette prise.
8 public void close () throws IOException
Ferme cette prise.

méthode de classe InetAddress

Cette classe représente un (IP) adresse de protocole Internet. Ci-dessous sont utiles lorsque la méthode de programmation Socket:

Non . Méthode description
1 static InetAddress getByAddress (byte [] adr )
Dans le cas compte tenu de l'adresse IP brute, retourner l'objet InetAddress.
2 static InetAddress getByAddress (String hôte, byte [] adr)
Selon créer InetAddress noms d'hôtes et les adresses IP fournies.
3 static InetAddress getByName (String hôte)
Déterminez l'adresse IP de l'hôte dans le cas d'un nom d'hôte donné.
4 Chaîne getHostAddress ()
Renvoie la chaîne d'adresse IP (présentation textuelle).
5 Chaîne getHostName ()
Obtient le nom d'hôte pour cette adresse IP.
6 static InetAddress getLocalHost ()
Renvoie l'hôte local.
7 String toString ()
Convertit cette adresse IP à une chaîne.

instance client Socket

Le GreetingClient suivant est un programme client qui est connecté par le biais d'une prise sur le serveur et envoyer une demande, puis attendez une réponse.

// 文件名 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();
      }
   }
}

instance de serveur Socket

Le programme GreetingServer suivant est une application côté serveur qui utilise Socket pour écouter sur un port spécifié.

// 文件名 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();
      }
   }
}

Compiler le code java ci-dessus, et exécutez la commande suivante pour démarrer le service, utilisez le numéro de port est 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
Ouvrez quelque chose comme les clients suivants:
$ 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!