Latest web development tutorials

Programmazione Java Network

programmazione di rete significa scrivere corsa su più dispositivi programma (computer), questi dispositivi sono collegati attraverso una rete.

pacchetto java.net nelle API J2SE contiene le classi e interfacce che forniscono dettagli di basso livello di comunicazione. È possibile utilizzare queste classi e interfacce di concentrarsi sulla soluzione del problema, piuttosto che concentrarsi sui dettagli di comunicazione.

package java.net fornisce il supporto per due protocolli di rete comuni:

  • TCP: TCP è l'acronimo di Transmission Control Protocol, che garantisce una comunicazione affidabile tra due applicazioni. Comunemente utilizzato per il protocollo Internet, chiamato TCP / IP.
  • UDP: UDP è l'abbreviazione di User Datagram Protocol, un protocollo senza connessione. Fornire il pacchetto di dati da trasmettere tra i dati delle applicazioni.

Questo tutorial spiega i seguenti due argomenti.

  • Presa di programmazione: Questo è il concetto di rete più diffuso, è stato spiegato in grande dettaglio per
  • Processing URL: Questo capitolo ha parlato in un altro spazio, clicca qui per saperne di più sulla gestione linguaggio Java URL .

presa di programmazione

Sockets utilizzano TCP fornisce un meccanismo di comunicazione tra i due computer. programma client crea un socket e cercando di connettersi al socket server.

Una volta stabilita la connessione, il server creerà un oggetto Socket. Client e server ora possono scrivere e leggere l'oggetto Socket per comunicare.

Classe java.net.Socket rappresenta una presa di corrente, e fornisce una classe java.net.ServerSocket da ascoltare per il programma client server, e stabilire un meccanismo per connettersi con loro.

Essa si verifica quando la connessione TCP utilizzando la seguente procedura per stabilire una presa tra due computer:

  • Server ServerSocket istanziare un oggetto che rappresenta la porta di comunicazione sul server.
  • chiamate al server di classe ServerSocket accettano metodo (), che aspettare fino a quando un client si connette al server su una determinata porta.
  • Quando il server è in attesa di un client per istanziare un oggetto Socket, specificare il nome del server e il numero di porta per richiedere una connessione.
  • costruttore della classe Socket tenta di connettere il client al numero di server e la porta specificata. Se viene stabilita la comunicazione, per creare un client oggetto Socket può comunicare con il server.
  • Metodo Sul lato server, accept () restituisce un nuovo riferimento server socket alla presa collegato alla presa cliente.

Dopo che la connessione viene stabilita utilizzando il flusso di I / O durante la comunicazione. Ogni presa ha un ingresso e un flusso di flusso di output. flusso di output stream di input client a un server, flusso di input del cliente nel flusso di output server.

TCP è un protocollo di comunicazione bidirezionale, quindi i dati possono essere inviati attraverso i due flussi di dati contemporaneamente. La seguente è una classe completa fornisce diversi metodi utili per realizzare prese.


metodi di classe ServerSocket

Le applicazioni server utilizzando classe java.net.ServerSocket per una porta e ascolta le richieste del cliente.

classe ServerSocket ha quattro costruttori:

No. metodo Descrizione
1 ServerSocket pubblico (int porta) throws IOException
Creare un legame con una specifica porta del socket server.
2 ServerSocket pubblico (porta int, int backlog ) throws IOException
Con l'arretrato specificato crea un socket server e si lega al numero di porta locale specificata.
3 ServerSocket pubblico (porta int, int backlog , InetAddress indirizzo) throws IOException
Utilizzando la porta specificata, ascoltare arretrato, e per legare l'indirizzo IP locale del server viene creato.
4 ServerSocket pubblico () throws IOException
Crea un socket server non legato.

Crea un socket server non legato. Se il metodo di costruzione ServerSocket non un'eccezione, significa che l'applicazione è stata vincolata con successo alla porta specificata, e ascolta le richieste del cliente.

Qui ci sono alcuni comuni metodi di classe ServerSocket:

No. metodo Descrizione
1 public int getLocalPort ()
Restituisce la porta su cui questo socket è in ascolto.
2 Socket pubblico accept () throws IOException
Lui ascolta e accetta questa presa.
3 setSoTimeout public void (int timeout)
Specificando il valore di timeout per abilitare / disabilitare SO_TIMEOUT, in millisecondi.
4 bind public void (host SocketAddress, int backlog)
Lega il ServerSocket a un indirizzo specifico (indirizzo IP e numero di porta).

metodi di classe Socket

java.net.Socket nome classe del client e server di comunicare con l'altro nella presa. Per ottenere un oggetto Socket cliente istanziando e il server per ottenere un oggetto Socket viene restituito per valore metodo accept ().

classe Socket ha cinque costruttori.

No. metodo Descrizione
1 Socket pubblico (host String, int porta ) getta UnknownHostException, IOException.
Crea un socket di flusso e lo collega al numero di porta specificato sull'host specificato.
2 Socket pubblico (InetAddress ospite, int port ) throws IOException
Crea un socket di flusso e si connette all'indirizzo IP specificato del numero di porta specificato.
3 Socket pubblico (host String, int porta , InetAddress LocalAddress, int localPort) throws IOException.
Crea una presa di corrente e si collega alla porta remota specificata sull'host remoto specificato.
4 Socket pubblico (host InetAddress, int porta , InetAddress LocalAddress, int localPort) throws IOException.
Crea una presa di corrente e si collega alla porta remota specificato l'indirizzo remoto specificato.
5 Socket pubblico ()
Creare una presa non collegata, il tipo di default del sistema SocketImpl

Al ritorno costruttore Socket, e non semplicemente un'istanza di un oggetto Socket, sarà effettivamente provare a connettersi al server e porta specificata.

Ecco alcuni metodi di interesse, attenzione al cliente e il server ha un oggetto Socket, indipendentemente dal client o il server possono chiamare questi metodi.

No. metodo Descrizione
1 public void connect (SocketAddress ospite, int timeout) throws IOException
Questa connessione socket al server, e specificare un valore di timeout.
2 pubblico InetAddress getInetAddress ()
L'indirizzo di ritorno della connessione socket.
3 public int getPort ()
I ritorni questa presa è collegata alla porta remota.
4 public int getLocalPort ()
I ritorni questa presa è destinata a una porta locale.
5 pubblico SocketAddress getRemoteSocketAddress ()
L'indirizzo di ritorno della finale questa presa è collegato, se si tratta di rendimenti non connessi nullo.
6 pubblico InputStream getInputStream () throws IOException
Restituisce un flusso di input per questa presa.
7 pubblico OutputStream getOutputStream () throws IOException
Restituisce un flusso di output per questa presa.
8 public void close () throws IOException
Chiude questa presa.

metodo della classe InetAddress

Questa classe rappresenta un indirizzo IP (Internet Protocol). Qui di seguito sono utili quando metodo di programmazione Socket:

No. metodo Descrizione
1 static InetAddress getByAddress (byte [] addr )
Nel caso dato l'indirizzo IP grezzo, tornare oggetto InetAddress.
2 static InetAddress getByAddress (host String, byte [] addr)
Secondo per creare nomi host InetAddress e gli indirizzi IP forniti.
3 static InetAddress getByName (host String)
Determinare l'indirizzo IP dell'host, nel caso di un determinato nome host.
4 String getHostAddress ()
Restituisce la stringa indirizzo IP (presentazione testuale).
5 String getHostName ()
Ottiene il nome host per l'indirizzo IP.
6 static InetAddress getLocalHost ()
Restituisce l'host locale.
7 String toString ()
Converte questo indirizzo IP in una stringa.

istanza del client Socket

Il seguente GreetingClient è un programma client che si connette tramite un socket al server e inviare una richiesta, poi attendere una risposta.

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

istanza del server Socket

Il seguente programma GreetingServer è un'applicazione lato server che utilizza socket per l'ascolto su una porta specificata.

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

Compilare il codice Java sopra, ed eseguire il seguente comando per avviare il servizio, utilizzare il numero di porta è 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
Aprire qualcosa come i seguenti clienti:
$ 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!