Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
метод read возвращает значение -1. В этом 
случае мы прерываем цикл ввода и передачи строк:
if(length == -1)
  break;
   Если же ответ сервера принят успешно, принятые данные записываются в строку 
str, которая отображается на консоли клиента:
System.out.println(">> " + str);
   Перед завершением своей работы клиент закрывает входной и выходной потоки, а 
также сокет, на котором выполнялась передача данных:
is.close();
os.close();
s.close();
   Использование датаграммных сокетов
   Как мы уже говорили, датаграммные сокеты не гарантируют доставку пакетов 
данных. Тем не менее, они работают быстрее потоковых и обеспечивают возможность 
широковещательной расслыки пакетов данных одновременно всем узлам сети. 
Последняя возможность используется не очень широко в сети Internet, однако в 
корпоративной сети Intranet вы вполне можете ей воспользоваться.
   Для работы с датаграммными сокетами приложение должно создать сокет на базе 
класса DatagramSocket, а также подготовить объект класса DatagramPacket, в 
который будет записан принятый от партнера по сети блок данных.
   Канал, а также входные и выходные потоки создавать не нужно. Данные 
передаются и принимаются методами send и receive, определенными в классе 
DatagramSocket.
   Класс DatagramSocket 
   Рассмотрим конструкторы и методы класса DatagramSocket, предназначенного для 
создания и использования датаграммных сокетов. 
   В классе DatagramSocket определены два конструктора, прототипы которых 
представлены ниже:
public DatagramSocket(int port);
public DatagramSocket();
   Первый из этих конструкторов позволяет определить порт для сокета, второй 
предполагает использование любого свободного порта.
   Обычно серверные приложения работают с использованием какого-то заранее 
определенного порта, номер которого известен клиентским приложениям. Поэтому 
для серверных приложений больше подходит первый из приведенных выше 
конструкторов.
   Клиентские приложения, напротив, часто применяют любые свободные на 
локальном узле порты, поэтому для них годится конструктор без параметров.
   Кстати, с помощью метода getLocalPort приложение всегда может узнать номер 
порта, закрепленного за данным сокетом:
public int getLocalPort();
   Прием и передача данных на датаграммном сокете выполняется с помощью методов 
receive и send, соответственно:
public void receive(DatagramPacket p);
public void send(DatagramPacket p);	
   В качестве параметра этим методам передается ссылка на пакет данных 
(соответственно, принимаемый и передаваемый), определенный как объект класса 
DatagramPacket. Этот класс будет рассмотрен в следующем разделе нашей книги.
   Еще один метод в классе DatagramSocket, которым вы будете пользоваться, это 
метод close, предназначенный для закрытия сокета:
public void close();
   Напомним, что сборка мусора в Java выполняется только для объектов, 
находящихся в оперативной памяти. Такие объекты, как потоки и сокеты, вы должны 
закрывать после использования самостоятельно.
   Класс DatagramPacket 
   Перед тем как принимать или передавать данные с использованием методов 
receive и send вы должны подготовить объекты класса DatagramPacket. Метод 
receive запишет в такой объект принятые данные, а метод send - перешлет данные 
из объекта класса DatagramPacket узлу, адрес которого указан в пакете.
   Подготовка объекта класса DatagramPacket для приема пакетов выполняется с 
помощью следующего конструктора:
public DatagramPacket(byte ibuf[], int ilength);
   Этому конструктору передается ссылка на массив ibuf, в который нужно будет 
записать данные, и размер этого массива ilength.
   Если вам нужно подготовить пакет для передачи, воспользуйтесь конструктором, 
который дополнительно позволяет задать адрес IP iaddr и номер порта iport 
адресата:
public DatagramPacket(byte ibuf[], int ilength,
  InetAddress iaddr, int iport);
   Таким образом, информация о том, в какой узел и на какой порт необходимо 
 
<<-[Весь Текст]
Страница: из 275
 <<-