Latest web development tutorials

Java Сетевое программирование

Сетевое программирование означает для записи работать на нескольких устройствах программы (компьютер), эти устройства соединены через сеть.

java.net пакет в J2SE API содержит классы и интерфейсы, которые обеспечивают низкоуровневые детали связи. Вы можете использовать эти классы и интерфейсы, чтобы сосредоточиться на решении проблемы, а не сосредоточиться на деталях связи.

java.net пакет обеспечивает поддержку двух наиболее распространенных сетевых протоколов:

  • TCP: TCP это аббревиатура для протокола управления передачей, которая гарантирует надежную связь между двумя приложениями. Обычно используется для Интернет-протокола, называемого TCP / IP.
  • UDP: UDP это аббревиатура от User Datagram Protocol, протокол без установления соединения. Предоставление пакета данных, подлежащих передаче между данными приложения.

В этом руководстве рассматриваются следующие две темы.

  • Socket программирования: Это наиболее широко используется концепция сети, это было объяснено в мельчайших деталях
  • URL Обработка: В этой главе говорили в другом пространстве, нажмите здесь , чтобы узнать больше об обработке Java язык URL .

Socket программирования

Гнезда используют TCP обеспечивает механизм связи между двумя компьютерами. Программа-клиент создает сокет и пытается подключиться к сокету сервера.

Когда соединение установлено, сервер будет создавать объект Socket. Клиент и сервер теперь может писать и читать объект сокета для связи.

java.net.Socket класс представляет сокет, и обеспечивает класс java.net.ServerSocket для прослушивания для программы клиент-сервер, а также создать механизм, чтобы связаться с ними.

Это происходит, когда соединение TCP, используя следующие шаги, чтобы создать сокет между двумя компьютерами:

  • ServerSocket сервер создания экземпляра объекта, который представляет коммуникационный порт на сервере.
  • сервер класса ServerSocket вызовы принимают () метод, который будет ждать до тех пор, пока клиент не подключается к серверу на данном порту.
  • Когда сервер ждет клиента, чтобы создать экземпляр объекта сокета, указать имя сервера и номер порта для запроса соединения.
  • класс Разъем конструктор пытается подключить клиента к указанному серверу и порту. Если связь установлена, чтобы создать клиент объекта сокет может обмениваться данными с сервером.
  • Метод На стороне сервера, принимают () возвращает новую ссылку на сокет сервера к гнезду, подключенного к разъему клиента.

После того, как соединение установлено с помощью потока ввода / вывода во время передачи данных. Каждое гнездо имеет вход и потока в выходной поток. Входной Клиент выходной поток поток на сервер, входной поток клиента на сервер вывода потока.

TCP является двунаправленным протоколом связи, таким образом данные могут быть отправлены через два потока данных одновременно. Ниже приведен полный класс предоставляет несколько полезных методов для достижения сокетов.


Методы класса ServerSocket

Серверные приложения, используя класс java.net.ServerSocket для порта и слушает запросы клиента.

Класс ServerSocket имеет четыре конструктора:

Нет . Метод Описание
1 общественного ServerSocket (INT порт) бросает IOException
Создайте привязку к определенному порту сокета сервера.
2 общественного ServerSocket (INT порт INT Отставание ) бросает IOException
С помощью указанного накопившихся Создает серверный сокет и связывает его с указанным локальным номером порта.
3 общественного ServerSocket (INT порт INT Отставание , InetAddress адрес) бросает IOException
Используя указанный порт, слушать накопившихся и привязать к локальному IP-адресу сервера создается.
4 общественного ServerSocket () бросает IOException
Создает сокет несвязанного сервера.

Создает сокет несвязанного сервера. Если метод ServerSocket конструктор не сгенерирует исключение, то это означает, что ваша заявка была успешно связана с указанным портом, и ожидает запросов клиента.

Вот некоторые общие методы класса ServerSocket:

Нет . Метод Описание
1 общественное INT getLocalPort ()
Возвращает порт, на котором этот сокет слушает.
2 общественное гнездо принимает () бросает IOException
Он слушает и принимает этот сокет.
3 общественного недействительными setSoTimeout (INT тайм - аут)
Указав значение тайм-аута для включения / выключения SO_TIMEOUT, в миллисекундах.
4 общественного недействительными привязки (SocketAddress хост, Int проволочки)
Связывает ServerSocket к определенному адресу (IP-адрес и номер порта).

Методы класса Оправа

java.net.Socket класс от имени клиента и сервера для общения друг с другом в гнезде. Чтобы получить клиентский объект сокета с помощью инстанцировании и сервером для получения объекта сокет возвращает значение метод принимает ().

Класс гнездо имеет пять конструкторов.

Нет . Метод Описание
1 общественное гнездо (String хост, Int - порт ) бросает UnknownHostException, IOException.
Создает потоковый сокет и связывает его с указанным номером порта на указанном хосте.
2 общественное гнездо (InetAddress хост, Int - порт ) бросает IOException
Создает потоковый сокет и связывает его с указанным IP-адрес указанного номера порта.
3 общественное гнездо (String хост, Int порт , InetAddress localAddress, INT локальный_порт) бросает IOException.
Создает сокет и связывает его с указанным удаленным портом на удаленном хосте.
4 общественное гнездо (InetAddress хост, порт INT , InetAddress localAddress, INT локальный_порт) бросает IOException.
Создает сокет и связывает его с указанным удаленным портом на указанном удаленном адресе.
5 общественное гнездо ()
Создание неподключенное сокета, тип системы по умолчанию SocketImpl

Когда сокет конструктор возвращает, а не просто создаем объект сокет, он будет на самом деле попытается подключиться к указанному серверу и порту.

Вот некоторые методы интерес, обратите внимание на клиенте и на сервере есть объект сокета, независимо от клиента или сервера может вызывать эти методы.

Нет . Метод Описание
1 общественного недействительными подключиться (SocketAddress хост, Int тайм - аут) бросает IOException
Это гнездо подключения к серверу, а также указать значение тайм-аута.
2 общественного InetAddress getInetAddress ()
Обратный адрес соединения сокета.
3 общественное INT getPort ()
Возвращает этот разъем подключен к удаленному порту.
4 общественное INT getLocalPort ()
Возвращает этот сокет привязан к локальному порту.
5 общественного SocketAddress getRemoteSocketAddress ()
Обратный адрес конечной точки подключен этот сокет, если он не подключен, то возвращается null.
6 общественного InputStream getInputStream () бросает IOException
Возвращает входной поток для этого сокета.
7 общественного OutputStream getOutputStream () бросает IOException
Возвращает выходной поток для данного сокета.
8 общественного недействительными близко () бросает IOException
Замыкает этот сокет.

Метод класса InetAddress

Этот класс представляет адрес Интернет-протокола (IP). Ниже полезны, когда метод программирования Цоколь:

Нет . Метод Описание
1 статическая InetAddress getByAddress (байт [] адр )
В случае данного исходный IP-адрес, вернуть объект InetAddress.
2 статическая InetAddress getByAddress (String хост, байт [] адр)
Согласно создавать InetAddress имена хостов и IP-адреса в комплект поставки.
3 статическая InetAddress getByName (String хост)
Определить IP-адрес хоста в случае данного имени хоста.
4 Строка getHostAddress ()
Возвращает IP-адрес строку (текстовая презентация).
5 Строка getHostName ()
Возвращает имя хоста для этого IP-адреса.
6 статическая InetAddress getLocalHost ()
Возвращает локальный хост.
7 Строка ToString ()
Преобразует этот IP-адрес в строку.

экземпляр клиентского сокета

Следующий GreetingClient является клиентская программа, которая подключается через сокет к серверу и отправить запрос, а затем ждать ответа.

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

Оправа экземпляр сервера

Следующая программа GreetingServer это приложение на стороне сервера, который использует гнездо для прослушивания на указанном порту.

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

Компиляция приведенный выше код Java, и выполнить следующую команду, чтобы запустить службу, используйте номер порта 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
Открыть что-то вроде следующих клиентов:
$ 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!