Главная » Java » java.net — сети

0

 

   Пакет Java, net содержит классы сетевых соединений (sockets), сетевых адресов (network addresses) и универсальных локаторов ресурсов (Universal Resource Locators — URLs), обеспечивающие функции поддержки сетевой инфраструктуры.

  Главным звеном пакета java.net служит класс Socket, представляющий сочинение одного объекта Socket с другим — возможно, созданным на другой ашине, — через которое может передаваться поток байтов. Объект Socket бычно конструируется с заданием имени хост-компьютера, объекта netAddress и номера порта в определенных сочетаниях. Допустимо также указывать локальные адрес InetAddress и номер порта, к которым должен быть привязан" объект Socket. Объект класса ServerSocket позволяет программе прослушивать" определенный порт, отслеживать входящие запросы на создание оединений и строить для каждого из них объект Socket. Следующий пример емонстрирует, каким образом может быть организован прием информации, ад-есуемой объекту сетевого соединения:

import java.net.*;

import java.io.*;

 

public class Acceptlnput {

        public static final  int PORT = OXCAFE;

 

        public static void main(String[]  args)

                 throws lOException

{

                 ServerSocket server = new serverSocket(PORT);

                 byte[]  bytes = new byte[1024];

                 for  (;;)   {

                        try {

                              System, out. println("——–") ;

                              socket sock = server.accept();

Inputstream in = sock.getlnputstream();

 int len;

while  ((len = in.read(bytes))  > 0)

                                  System.out.write(bytes,  0,   len);

                             in.close();

                       } catch  (lOException e)  {

                             e.printstackTrace() ;

                       }

                }

        }

}

 

Программа создает объект ServerSocket и циклически опрашивает порт, пытаясь выявить запрос на создание соединения. Объект Socket, построенный для каждого соединения, позволяет получить поток ввода байтовых данных; информация считывается из потока и передается в стандартный поток вывода. Исходный код метода-клиента, служащего поставщиком данных для программы-сервера, может выглядеть, например, так:

 

import java.net.*;

 import java.io.*;

 

public class writeOutput  {

public static void main(String[]  args) throws lOException

{

String host = args[0];

Socket sock = new Socket(host, Acceptlnput.PORT);

 OutputStream out = sock.getOutputStream();

 int ch;

while ((ch = System.in. read()) != -1)

   out.write(ch);

out.close() ;

   }

}

   Как только соединение объектов Socket установлено, операции ввода-вывода выполняются как обычно.

   Объект класса URL сохраняет адрес URL и поддерживает методы, позволяющие проверять и задавать значения его различных частей (названия протокола, обозначения хост-компьютера, номера порта и имени файла). Объект URL просто указывает на ресурс — чтобы получить доступ к этому ресурсу, средует вызвать метод openConnection объекта. Метод возвращает объект класса URLConnection, который дает возможность считывать содержимое полей заголовка и ресурса в целом, получать объекты потоков ввода-вывода, соединенных с ресурсом, и т.д. Следующая программа позволяет считывать содержимое ресурса с заданным адресом URL:

 

import java.net.*;

import java.io.*;

 

public class ReadURL {

public static void main(String[]  args)  {

for  (int i  = 0;   i  < args.length;   i++)  {

try {

   readURL(args[i]);

 } catch  (Exception e)  {

System.err.println(args[i]  + ":");

e.printstackTrace();

    }

   }

}

private static void  readURL(String name)

   throws MalformedURLException,   lOException

{

URL url = new URL(name);

URLConnection connect = url.openConnection();

Inputstream in = connect.getlnputStream();

byte[] bytes = new byte[1024];

 

int len;            // Число фактически считанных байтов

while ((len = in.read(bytes)) >= 0)

System.out.write(bytes, 0, len);

  }

}

   Средства класса URLEncoder позволяют преобразовать строку формата ISO Latin-1 (скажем, набранную пользователем) в такой вид, который приемлем для включения ее состав адреса URL. При этом буквы ASCII и цифры остаются без изменений, символы пробела трансформируются в знаки +, а все другие символы представляются восемью младшими битами исходного кода, преобразованными в Щестнадцатеричную запись с префиксом %.

  Метод File. tolIRL возвращает объект URL для файла, задаваемого текущим .бъектом класса File.

  Объекты класса DatagramSocket позволяют передавать объекты )atagramPacket, содержащие массивы байтов. При передаче пакетов-дейтаграмм (datagrams) не требуется наличия заранее установленного соедине-шя — каждый пакет отсылается и маршрутизируется индивидуально, а получатель может принимать их в произвольном порядке. Класс MulticastSocket, производный от DatagramSocket, дает возможность создания соединений, пред-1азначенных для пересылки пакетов по многим адресам.

 

 

 

 

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии