Latest web development tutorials

Programación de la cadena de Java

programación de la red significa escribir ejecutarse en múltiples dispositivos (programa de ordenador), estos dispositivos están conectados a través de una red.

java.net paquete en el API de J2SE contiene clases e interfaces que proporcionan detalles de comunicación de bajo nivel. Puede utilizar estas clases e interfaces para centrarse en la solución del problema, en lugar de centrarse en los detalles de comunicación.

paquete java.net proporciona soporte para dos protocolos de red comunes:

  • TCP: TCP es la abreviatura de Protocolo de control de transmisión, lo que garantiza una comunicación fiable entre dos aplicaciones. Comúnmente utilizado para el protocolo de Internet, llamado TCP / IP.
  • UDP: UDP es una abreviatura de Protocolo de datagramas de usuario, un protocolo sin conexión. Proporcionando el paquete de datos a transmitir entre los datos de aplicación.

Este tutorial explica los dos temas siguientes.

  • La programación del zócalo: Este es el concepto de red más utilizado, se ha explicado con gran detalle a
  • Procesamiento URL: Este capítulo hablado en otro espacio, haga clic aquí para aprender más sobre el manejo de lenguaje Java URL .

La programación del zócalo

Zócalos utilizan TCP proporciona un mecanismo de comunicación entre los dos equipos. programa de cliente crea un socket y tratando de conectar a la toma de servidor.

Cuando se establece la conexión, el servidor creará un objeto Socket. Cliente y servidor ahora pueden escribir y leer el objeto de socket para comunicarse.

java.net.Socket clase representa un socket, y proporciona una clase java.net.ServerSocket para escuchar el programa de servidor de cliente para, y establecer un mecanismo para conectar con ellos.

Se produce cuando la conexión TCP utilizando los siguientes pasos para establecer una toma entre dos equipos:

  • servidor ServerSocket instanciar un objeto que representa el puerto de comunicaciones en el servidor.
  • llamadas al servidor de clase ServerSocket aceptan método (), que va a esperar hasta que un cliente se conecta al servidor en un puerto dado.
  • Cuando el servidor está a la espera de un cliente a una instancia de un objeto Socket, especifique el nombre del servidor y número de puerto para solicitar una conexión.
  • constructor de la clase Socket intenta conectar el cliente al servidor y número de puerto especificado. Si se establece la comunicación, para crear un cliente objeto Socket se puede comunicar con el servidor.
  • método en el lado del servidor, aceptar () devuelve una nueva referencia de servidor de socket a la toma conectada a la toma de cliente.

Después de la conexión se establece mediante el uso de la corriente de E / S durante la comunicación. Cada enchufe tiene una entrada y una corriente de flujo de salida. entrada del cliente flujo de salida de corriente a un servidor, flujo de entrada del cliente a la corriente de salida del servidor.

TCP es un protocolo de la comunicación bidireccional, lo que los datos pueden ser enviados a través de los dos flujos de datos al mismo tiempo. La siguiente es una clase completa proporciona varios métodos útiles para lograr sockets.


métodos de clase ServerSocket

Las aplicaciones de servidor mediante el uso de la clase java.net.ServerSocket para un puerto y escucha peticiones de clientes.

ServerSocket clase tiene cuatro constructores:

No. Descripción del método
1 ServerSocket pública (int puerto) throws IOException
Crear una unión a un puerto específico de la toma de servidor.
2 ServerSocket pública (puerto int, int backlog ) throws IOException
Con el retraso especificado crea un socket de servidor y se une al número de puerto local especificado.
3 ServerSocket pública (puerto int, int atraso , dirección InetAddress) throws IOException
Usando el puerto especificado, escuchar atraso, y de obligar a la dirección IP local del servidor se crea.
4 ServerSocket pública () throws IOException
Crea un socket de servidor no unido.

Crea un socket de servidor no unido. Si el método ServerSocket constructor no una excepción, significa que su solicitud ha sido vinculado satisfactoriamente al puerto especificado, y escucha las peticiones de los clientes.

Éstos son algunos métodos de la clase ServerSocket común:

No. Descripción del método
1 public int getLocalPort ()
Devuelve el puerto en el que escucha esta toma.
2 Socket pública aceptar () throws IOException
Él escucha y acepta esta toma.
3 pública setSoTimeout void (int timeout)
Al especificar el valor de tiempo de espera para activar / desactivar SO_TIMEOUT, en milisegundos.
4 pública se unen vacío (host SocketAddress, int backlog)
Se une el ServerSocket a una dirección específica (dirección IP y número de puerto).

métodos de la clase Socket

java.net.Socket nombre de clase de la cliente y servidor para comunicarse entre sí en el zócalo. Para obtener un objeto Socket cliente creando instancias y el servidor para obtener un objeto Socket se devuelve por valor método accept ().

clase Socket tiene cinco constructores.

No. Descripción del método
1 Socket pública (String host, int puerto ) lanza UnknownHostException, IOException.
Crea una toma de corriente y lo conecta con el número de puerto especificado en el host especificado.
2 Socket pública (InetAddress anfitrión, int puerto ) throws IOException
Crea una toma de corriente y se conecta a la dirección IP especificada del número de puerto especificado.
3 Socket pública (String host, int puerto , InetAddress localAddress, int localPort) throws IOException.
Crea un socket y lo conecta con el puerto remoto especificado en el host remoto especificado.
4 Socket pública (host InetAddress, int puerto , InetAddress localAddress, int localPort) throws IOException.
Crea un socket y lo conecta con el puerto remoto especificado en la dirección remota especificada.
5 Socket pública ()
Crear una toma sin conexión, el tipo por defecto del sistema SocketImpl

Cuando los rendimientos de vaso constructor, y no simplemente una instancia de un objeto Socket, en realidad va a tratar de conectar con el servidor y el puerto especificado.

Éstos son algunos de los métodos de interés, preste atención al cliente y el servidor tiene un objeto Socket, independientemente de que el cliente o el servidor puede llamar a estos métodos.

No. Descripción del método
1 public void connect (SocketAddress anfitrión, int timeout) throws IOException
Esta conexión de socket con el servidor y especificar un valor de tiempo de espera.
2 público InetAddress getInetAddress ()
La dirección de retorno de la conexión de socket.
3 public int getPort ()
Devoluciones esta toma se conecta al puerto remoto.
4 public int getLocalPort ()
Devuelve este socket está enlazado a un puerto local.
5 público SocketAddress getRemoteSocketAddress ()
La dirección del remitente del punto final de esta toma está conectada, si se trata de retornos inconexas nula.
6 pública InputStream getInputStream () throws IOException
Devuelve un flujo de entrada para este zócalo.
7 pública OutputStream getOutputStream () throws IOException
Devuelve un flujo de salida para este zócalo.
8 public void close () throws IOException
Cierra esta toma.

método de clase InetAddress

Esta clase representa una dirección de Protocolo de Internet (IP). A continuación se enumeran útil cuando método de programación del zócalo:

No. Descripción del método
1 estática InetAddress getByAddress (byte [] addr )
En el caso dado la dirección IP en bruto, volver InetAddress objeto.
2 estática InetAddress getByAddress (String host, byte [] addr)
Según crear nombres de host y direcciones IP InetAddress suministrados.
3 estática InetAddress getByName (String host)
Determinar la dirección IP de la máquina en el caso de un nombre de host determinado.
4 Cadena getHostAddress ()
Devuelve la cadena de dirección IP (la presentación del texto).
5 Cadena GetHostName ()
Obtiene el nombre de host para esta dirección IP.
6 estática InetAddress getLocalHost ()
Devuelve el host local.
7 String toString ()
Convierte esta dirección IP en una cadena.

instancia de cliente socket

La siguiente GreetingClient es un programa cliente que está conectado a través de un socket con el servidor y enviar una solicitud, a continuación, esperar una respuesta.

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

instancia del servidor de socket

El siguiente programa GreetingServer es una aplicación de servidor que utiliza socket para escuchar en un puerto especificado.

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

Compilar el código java anterior, y ejecutar el siguiente comando para iniciar el servicio, utilice el número de puerto es 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
Abrir algo así como los siguientes clientes:
$ 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!