Программирование на Java

       

Обратите внимание на обработку исключительной


try { Socket s = new Socket("localhost", 3456); InputStream is = s.getInputStream(); is.read(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

Обратите внимание на обработку исключительной ситуации UnknownHostException, которая будет генерироваться, если виртуальная машина с помощью операционной системы не сможет распознать указанный адрес сервера в случае, если он задан строкой. Если же он задан экземпляром InetAddress, то эту ошибку надо обрабатывать при вызове статических методов данного класса.

На стороне сервера класс Socket используется точно таким же образом – через методы getInputStream() и getOutputStream(). Приведем более полный пример:

import java.io.*; import java.net.*; public class Server { public static void main(String args[]) { try { ServerSocket ss = new ServerSocket(3456); System.out.println("Waiting..."); Socket client=ss.accept(); System.out.println("Connected"); client.getOutputStream().write(10); client.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } }

Сервер по запросу клиента отправляет число 10 и завершает работу. Обратите внимание, что при завершении вызываются методы close() для открытых сокетов.

Класс клиента:

import java.io.*; import java.net.*; public class Client { public static void main(String args[]) { try { Socket s = new Socket("localhost", 3456); InputStream is = s.getInputStream(); System.out.println("Read: "+is.read()); s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

После запуска сервера, а затем клиента, можно увидеть результат – полученное число, 10, после чего обе программы закроются.

Рассмотрим эти классы более подробно. Во-первых, класс ServerSocket имеет конструктор, в который передается, кроме номера порта, еще и адрес машины. Это может показаться странным, ведь сервер открывается на той же машине, где работает программа, зачем специально указывать ее адрес? Однако, если компьютер имеет несколько сетевых интерфейсов (сетевых карточек), то он имеет и несколько сетевых адресов. С помощью такого детализированного конструктора можно указать, по какому именно адресу ожидать подключения. Это должен быть именно локальный адрес машины, иначе возникнет ошибка.


Содержание  Назад  Вперед







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий