Latest web development tutorials

Java Network Programming

Netzwerkprogrammierung bedeutet laufen auf mehreren Geräten (Computer) Programm zu schreiben, werden diese Geräte über ein Netzwerk verbunden sind.

java.net Paket in der J2SE-API enthält Klassen und Schnittstellen, die Low-Level-Kommunikationsdaten zur Verfügung stellen. Sie können diese Klassen und Schnittstellen verwenden, um auf die Lösung des Problems zu konzentrieren, anstatt den Schwerpunkt auf die Kommunikationsdaten.

java.net Paket bietet Unterstützung für zwei gängige Netzwerkprotokolle:

  • TCP: TCP ist die Abkürzung für Transmission Control Protocol, die zwischen zwei Anwendungen eine zuverlässige Kommunikation gewährleistet. Üblicherweise für Internet-Protokoll, TCP / IP genannt.
  • UDP: UDP ist eine Abkürzung für User Datagram Protocol, ein verbindungsloses Protokoll. Bereitstellen des Datenpakets zwischen den Anwendungsdaten zu übertragen.

Dieses Tutorial erklärt die folgenden zwei Themen.

  • Socket - Programmierung: Dies ist die am weitesten verbreitete Netzwerk - Konzept hat sich sehr ausführlich erklärt worden
  • URL - Verarbeitung: In diesem Kapitel in einem anderen Raum gesprochen, klicken Sie hier mehr über die lernen URL Java Umgang mit Sprache .

Socket-Programmierung

Sockets verwenden TCP einen Mechanismus für die Kommunikation zwischen den beiden Computern zur Verfügung stellt. Client-Programm erzeugt einen Socket und zu versuchen, den Server-Socket zu verbinden.

Wenn die Verbindung hergestellt ist, wird der Server ein Socket-Objekt erstellen. Client und Server können jetzt schreiben und das Socket-Objekt zu lesen, zu kommunizieren.

java.net.Socket Klasse stellt einen Sockel und bietet eine java.net.ServerSocket Klasse für die Client-Server-Programm zu hören, und schaffen einen Mechanismus, mit ihnen zu verbinden.

Es tritt auf, wenn die TCP-Verbindung die folgenden Schritte mit einem Sockel zwischen zwei Computern herzustellen:

  • ServerSocket- Server instanziiert ein Objekt, das den Kommunikations-Port auf dem Server darstellt.
  • ServerSocket- Klasse Server Anrufe annehmen () -Methode, die warten, bis ein Client auf einem bestimmten Port mit dem Server verbindet.
  • Wenn der Server für einen Kunden wartet ein Socket-Objekt instanziiert, geben Sie den Servernamen und die Portnummer eine Verbindung anzufordern.
  • Socket-Klasse Konstruktor versucht, den Client an den angegebenen Server und die Portnummer zu verbinden. Wenn die Verbindung hergestellt ist, ein Socket-Objekt-Client erstellen können mit dem Server kommunizieren.
  • Auf der Serverseite, akzeptieren () Methode gibt einen neuen Socket-Server Bezug auf die Buchse an den Client-Buchse angeschlossen.

Nachdem die Verbindung mit dem I / O-Stream während der Kommunikation etabliert. Jeder Sockel hat einen Eingang und einen Ausgabestrom Strom. Client-Eingangsstrom Ausgangsstrom an einen Server, der Eingangsstrom des Clients auf dem Server Ausgabestream.

TCP ist ein bidirektionales Kommunikationsprotokoll, so können die Daten durch die beiden Datenströme, die gleichzeitig gesendet werden. Das folgende ist eine Klasse mehrere nützliche Methoden bietet Buchsen zu erreichen.


ServerSocket- Klassenmethoden

Server-Anwendungen unter Verwendung von java.net.ServerSocket Klasse für einen Port und wartet auf Client-Anfragen.

ServerSocket- Klasse hat vier Konstrukteure:

Nein . Methode Beschreibung
1 public ServerSocket- (int port) throws IOException
Erstellen Sie eine Bindung an einen bestimmten Port des Server-Sockets.
2 public ServerSocket- (int port, int Rückstand ) throws IOException
Mit dem angegebenen Rückstand Erstellt eine Server-Socket und bindet es an die angegebene lokale Port-Nummer.
3 public ServerSocket- (int port, int Rückstand , InetAddress Adresse) throws IOException
Mit dem angegebenen Port, hören Rückstand und auf die lokale IP-Adresse des Servers zu binden, wird erstellt.
4 public ServerSocket- () throws IOException
Erzeugt ein ungebundenes Server-Socket.

Erzeugt ein ungebundenes Server-Socket. Wenn der ServerSocket- Konstruktor-Methode keine Ausnahme werfen, bedeutet dies, dass die Anwendung erfolgreich auf den angegebenen Port gebunden ist, und wartet auf Client-Anfragen.

Hier sind einige gängige Methoden ServerSocket- Klasse:

Nein . Methode Beschreibung
1 public int getLocalPort ()
Gibt den Port, an dem diese Buchse hört.
2 public Sockel accept () throws IOException
Er hört zu und nimmt diese Buchse.
3 public void setSoTimeout (int timeout)
Durch den Timeout-Wert, der angibt zu aktivieren / deaktivieren SO_TIMEOUT in Millisekunden.
4 public void bind (Socket Host, int Backlog)
Bindet den ServerSocket- an eine bestimmte Adresse (IP-Adresse und Port-Nummer).

Socket-Klasse Methoden

java.net.Socket Klasse für den Client und Server miteinander in der Buchse zu kommunizieren. Um einen Client Socket-Objekt durch Instanziieren und dem Server erhalten ein Socket-Objekt zu erhalten, ist von Wert annehmen () -Methode zurückgegeben.

Socket-Klasse verfügt über fünf Konstrukteurs.

Nein . Methode Beschreibung
1 public Socket (String - Host, int port ) wirft Unknown, IOException.
Erstellt einen Stream-Socket und verbindet es mit dem angegebenen Portnummer auf dem angegebenen Host.
2 public Socket (InetAddress Host, int port ) throws IOException
Erstellt einen Stream-Socket und verbindet ihn an die angegebene IP-Adresse des angegebenen Port-Nummer.
3 public Socket (String - Host, int port , InetAddress localaddress, int localport) throws IOException.
Erzeugt einen Socket und verbindet es mit dem angegebenen Remote-Port auf dem angegebenen Remote-Host.
4 public Socket (InetAddress Host, int port , InetAddress localaddress, int localport) throws IOException.
Erzeugt einen Socket und verbindet es mit dem angegebenen Remote-Port auf dem angegebenen Remoteadresse.
5 öffentlich - Anschluss ()
Erstellen Sie eine nicht verbundene Buchse, die Systemstandardtyp SocketImpl

Wenn die Socket-Konstruktor zurückkehrt, und nicht einfach ein Socket-Objekt instanziiert, wird es versuchen, tatsächlich an den angegebenen Server und Port anschließen.

Hier sind einige Methoden von Interesse, achten Sie auf dem Client und dem Server ein Socket-Objekt hat, unabhängig von der Client oder der Server diese Methoden aufrufen können.

Nein . Methode Beschreibung
1 public void connect (Socket Host, int timeout) throws IOException
Diese Socket-Verbindung zum Server, und geben Sie einen Timeout-Wert.
2 public InetAddress getInetAddress ()
Die Rücksendeadresse des Socket-Verbindung.
3 public int getPort ()
Returns diese Buchse ist mit dem Remote-Port angeschlossen ist.
4 public int getLocalPort ()
Returns diese Buchse wird an einen lokalen Anschluss gebunden.
5 public Socket getRemoteSocketAddress ()
Die Rückkehr-Adresse des Endpunkts diese Buchse angeschlossen ist, wenn es nicht verbundenen Renditen null ist.
6 public Input getInputStream () throws IOException
Gibt ein Eingangsstrom für diesen Sockel.
7 public Output getOutputStream () throws IOException
Gibt einen Ausgangsstrom für diesen Sockel.
8 public void close () throws IOException
Schließt diese Buchse.

InetAddress Klassenmethode

Diese Klasse stellt eine Internet-Protokoll (IP) -Adresse. Im Folgenden sind nützlich, wenn Socket-Programmierung Methode:

Nein . Methode Beschreibung
1 statische InetAddress getByAddress (byte [] adr )
Im Fall der Raw-IP-Adresse angegeben, zurückzukehren InetAddress Objekt.
2 statische InetAddress getByAddress (String - Host, Byte [] adr)
Nach InetAddress Hostnamen und IP-Adressen geliefert erstellen.
3 statische InetAddress getByName (String host)
Ermitteln Sie die IP-Adresse des Rechners im Fall von einem Hostnamen.
4 String getHostAddress ()
Gibt die IP-Adresse string (textliche Präsentation).
5 String getHostName ()
Ruft den Hostnamen für diese IP-Adresse.
6 statische InetAddress getLocalHost ()
Gibt den lokalen Host.
7 String toString ()
Konvertiert diese IP-Adresse in einen String.

Socket-Client-Instanz

Die folgende GreetingClient ist ein Client-Programm, das über eine Buchse mit dem Server verbunden ist und eine Anfrage schicken, dann auf eine Antwort warten.

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

Socket-Serverinstanz

Das folgende GreetingServer Programm ist eine serverseitige Anwendung, die Sockel verwendet, um auf einen bestimmten Port zu hören.

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

Kompilieren Sie die oben Java-Code, und führen Sie den folgenden Befehl, um den Dienst zu starten, verwenden Sie die Portnummer 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
Öffnen Sie so etwas wie die folgenden Kunden:
$ 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!