Latest web development tutorials

Java Programming Network

Programowanie sieciowe oznacza napisać uruchomić na wielu urządzeniach (komputer) programu, urządzenia te są połączone za pośrednictwem sieci.

Pakiet java.net w API J2SE zawiera klasy i interfejsy, które dostarczają dane komunikacyjne niskiego poziomu. Można korzystać z tych klas i interfejsów, aby skupić się na rozwiązywaniu problemu, zamiast skupiać się na szczegółach komunikacyjnych.

Pakiet java.net zapewnia obsługę dwóch popularnych protokołów sieciowych:

  • TCP: TCP to skrót od Transmission Control Protocol, co gwarantuje niezawodną komunikację pomiędzy dwoma aplikacjami. Powszechnie stosowane do protokołu internetowego, zwanego TCP / IP.
  • UDP: UDP jest skrótem od User Datagram Protocol, bezpołączeniowego protokołu. Dostarczanie pakietów danych, które mają być transmitowane między danymi aplikacji.

Ten poradnik opisuje następujące dwa tematy.

  • Gniazdo programowania: Jest to najbardziej powszechnie stosowany Koncepcja sieci, została wyjaśniona bardziej szczegółowo
  • Przetwarzanie URL: Ten rozdział rozmawialiśmy w innym miejscu, kliknij tutaj, aby dowiedzieć się więcej na temat obsługi języka Java URL .

gniazdo programowania

Gniazdka użyciu TCP zapewnia mechanizm komunikacji między dwoma komputerami. Program kliencki tworzy gniazdo i próbuje podłączyć do gniazda serwera.

Po nawiązaniu połączenia, serwer utworzy obiekt Socket. Klient i serwer mogą teraz pisać i czytać obiekt Socket komunikowania.

Klasa java.net.Socket reprezentuje gniazdo i dostarcza klasę java.net.ServerSocket na nasłuchiwanie programu klient-serwer, oraz stworzyć mechanizm, aby połączyć się z nimi.

Występuje, gdy połączenie TCP, wykonując następujące kroki w celu ustanowienia gniazdo między dwoma komputerami:

  • serwer ServerSocket instancję obiektu, który reprezentuje port komunikacyjny na serwerze.
  • Połączenia serwerów klasy ServerSocket zaakceptować metodę (), która będzie czekać, aż klient łączy się z serwerem na danym porcie.
  • Gdy serwer czeka na klienta do instancji obiektu Socket określić nazwę serwera i numer portu do żądania połączenia.
  • Konstruktor klasy Socket próbuje połączyć klienta do określonej liczby serwerów i portów. Jeśli komunikacja zostanie ustalone, aby utworzyć klienta obiektu gniazda może komunikować się z serwerem.
  • Metoda po stronie serwera, accept () zwraca nową nazwę serwera gniazda do gniazda podłączonego do gniazda klienta.

Po nawiązaniu połączenia za pomocą strumienia I / O podczas komunikacji. Każde gniazdo posiada wejście i wyjście strumienia stream. Wejście Client strumień wyjściowy strumień do serwera, strumień wejściowy klienta do strumienia wyjściowego serwera.

TCP to protokół komunikacji dwukierunkowej, więc dane mogą być wysyłane za pośrednictwem dwóch strumieni danych jednocześnie. Poniżej znajduje się pełna klasa udostępnia kilka przydatnych metod, aby osiągnąć gniazd.


Metody klasy ServerSocket

Aplikacje serwerem za pomocą klasy java.net.ServerSocket do portu i nasłuchuje żądań klienta.

Klasa ServerSocket ma cztery konstruktorów:

Nie. metoda Opis
1 ServerSocket publicznych (int port) rzuca IOException
Tworzenie wiązania do określonego portu gniazda serwera.
2 ServerSocket publicznych (int port int backlog ) wyrzuca IOException
Z podanej zaległości tworzy gniazdo serwera i wiąże się z określonym numerem portu lokalnego.
3 ServerSocket publicznych (int port int backlog , InetAddress adres) rzuca IOException
Korzystanie z określonego portu, słuchać zaległości, a także wiązać się z lokalnym adresem IP serwera jest tworzony.
4 ServerSocket publicznego () wyrzuca IOException
Tworzy niezwiązanego gniazdo serwera.

Tworzy niezwiązanego gniazdo serwera. Jeśli metoda konstruktora ServerSocket nie wyjątek, oznacza to, że aplikacja została pomyślnie zobowiązany do określonego portu i nasłuchuje żądań klienta.

Oto kilka typowych metod klasy ServerSocket:

Nie. metoda Opis
1 public int getLocalPort ()
Zwraca port, na którym nasłuchuje to gniazdo.
2 Gniazdo publicznego accept () wyrzuca IOException
Słucha i akceptuje tego gniazda.
3 public void setSoTimeout (int timeout)
Określając wartość limitu czasu, aby włączyć / wyłączyć SO_TIMEOUT w milisekundach.
4 public void bind (hosta SocketAddress, int backlog)
Wiąże ServerSocket do konkretnego adresu (adres IP i numer portu).

Metody klasy Socket

java.net.Socket klasy imieniu klienta i serwera, aby komunikować się ze sobą w gnieździe. Aby uzyskać obiekt Socket klienckiej przy uruchamianiu i serwera, aby uzyskać obiekt Socket jest zwracany przez wartość metoda accept ().

Klasa Socket posiada pięć konstruktorów.

Nie. metoda Opis
1 Gniazdo publicznych (String host, int port ) wyrzuca UnknownHostException, IOException.
Tworzy gniazdo Stream i łączy go z określonym numerem portu na określonym komputerze.
2 Gniazdo publicznych (host InetAddress, int port ) throws IOException
Tworzy gniazdo Stream i łączy go z określonym adresem IP określonym numerem portu.
3 Gniazdo publicznych (String host, int port , InetAddress lokalnego adresu, int LocalPort) wyrzuca IOException.
Tworzy gniazdo i łączy je do określonego portu zdalnego określonego zdalnego hosta.
4 Gniazdo publicznych (host InetAddress, int port , InetAddress lokalnego adresu, int LocalPort) wyrzuca IOException.
Tworzy gniazdo i łączy je do określonego portu zdalnego określonego zdalnego adresu.
5 Gniazdo publicznego ()
Tworzenie niepodłączone gniazdo, domyślny typ systemu SocketImpl

Gdy gniazda konstruktor powraca, a nie po prostu instancję obiektu Socket, to rzeczywiście próbować połączyć się z serwerem i określonego portu.

Oto kilka metod zainteresowania, należy zwrócić uwagę na klienta i serwer ma obiekt Socket, niezależnie od klienta lub serwera można nazwać tych metod.

Nie. metoda Opis
1 public void connect (hosta SocketAddress, int timeout) rzuca IOException
Ta gra gniazdo z serwerem i określić wartość limitu czasu.
2 publicznego InetAddress getInetAddress ()
Adres zwrotny połączenia sieciowego.
3 public int getPort ()
Zwraca to gniazdo jest podłączone do zdalnego portu.
4 public int getLocalPort ()
Zwraca to gniazdo jest związana z miejscowym porcie.
5 publicznego SocketAddress getRemoteSocketAddress ()
Adres zwrotny od punktu końcowego to gniazdo jest połączone, jeżeli jest to niezwiązane zwraca null.
6 public InputStream getInputStream () wyrzuca IOException
Zwraca strumień wejściowy dla tego gniazda.
7 public OutputStream getOutputStream () wyrzuca IOException
Zwraca strumień wyjściowy dla tego gniazda.
8 public void close () wyrzuca IOException
Zamknięcie tego gniazda.

metoda klasy InetAddress

Klasa ta reprezentuje Internet Protocol (IP). Poniżej wymienione są użyteczne, gdy metoda programowania Gniazdo:

Nie. metoda Opis
1 statyczne InetAddress getByAddress (byte [] addr )
W przypadku, ze względu na surowe adres IP, wróć obiekt InetAddress.
2 statyczne InetAddress getByAddress (String host, byte [] addr)
Według utworzyć nazwy hostów i adresy IP InetAddress dostarczone.
3 statyczne InetAddress getByName (String host)
Określ adres IP hosta w przypadku danej nazwy hosta.
4 GetHostAddress String ()
Zwraca ciąg adresów IP (prezentacja tekstowa).
5 String gethostname ()
Pobiera nazwę hosta dla tego adresu IP.
6 statyczne InetAddress getLocalHost ()
Zwraca lokalny gospodarz.
7 String toString ()
Przekształca ten adres IP String.

Gniazdo instancji klienta

Poniższy GreetingClient to klient, który jest podłączony przez gniazdo z serwerem i wysyła żądanie, a następnie czekać na odpowiedź.

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

Gniazdo wystąpienie serwera

Poniższy program GreetingServer jest aplikacją po stronie serwera, który używa gniazda do słuchania na określonym porcie.

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

Skompilować powyższy kod Java i wykonaj następujące polecenie, aby uruchomić usługę, należy użyć numeru portu 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
Otwarty coś w następujących klientów:
$ 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!