Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Понятие клиента и сервера

Читайте также:
  1. V1: Понятие логистики. Сущность и свойства логистической системы
  2. А. Понятие о ВИЧ-инфекции.
  3. АКТЫ ПРИМЕНЕНИЯ ПРАВОВЫХ НОРМ: ПОНЯТИЕ, ВИДЫ
  4. Альтернативные издержки (издержки отвергнутых возможностей): понятие и графический анализ
  5. Банковская система: понятие, свойства ,типы, уровни, элементы. Банковская система РФ.
  6. БЛАГОДАРНОСТЬ КЛИЕНТАМ
  7. Бухгалтерский учет причитающихся банку доходов по кредитным договорам с клиентами

Понятие и определение класса.

Класс – это базовая конструкция Java; шаблон для объекта. Объект – это экземпляр класса. Данные класса называются переменными экземпляра. Код класса – это методы.

Пример класса:

class HelloWorld {

public static void main(String args[])

{ System.out.println(“Моя первая Java-программа“); }}

Объявление объектов и операция new

Получение объектов класса − это двухшаговый процесс. Во-первых, нужно объявить переменную типа «класс». Она не определяет объект. Это просто переменная, которая может ссылаться на объект. Во-вторых, нужно получить актуальную, физическую копию объекта и назначить ее этой переменной. Это можно сделать с помощью операции new. Операция new распределяет динамически (т.е. во время выполнения) память для объекта и возвращает ссылку на нее. Данная ссылка является адресом ячейки памяти, выделенной объекту вышеуказанной операцией. Затем эта ссылка сохраняется в переменной. Таким образом, в Java все объекты класса должны быть распределены динамически

// первый способ

Box mybox = new Box();

// второй способ

Box mybox; // объявить ссылку на объект

mybox = new Box(); // распределить память для Вох-объекта

Модификаторы класса.

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

рublic – класс доступен для использования или расширения всем объектам вне зависимости от пакета или от каталога. Рublic-классы должны хранится в файлах с именем имя_класса.java.

friendly – модификатор класса по умолчанию, если модификатор не определен явно для класса. Такой класс доступен только для объектов, находящихся в том же пакете.

final – класс не может иметь подклассов, то есть производных классов.

abstract – класс, в котором объявлен хотя бы один абстрактный метод. Для таких классов нельзя создавать объекты. Такие классы используются для производных классов.

Использование атрибутов доступа к элементам класса (внутри класса)

1) Public- метод или данные класса, которые имеют рublic доступы из любого места программы;

Private- нет никакого доступа к переменной этого класса;

2) Protected- переменная доступна из любого класса в том же пакете (папке) и из любого подкласса, где угодно;

3) Отсутствие атрибута доступа- переменная видна из любого класса в том же пакете.

Методы класса. Метод main(). Конструкторы класса.

Объявление методов

Объявление метода состоит из заголовка и тела метода. Состав заголовка: • модификаторы (доступа в том числе); • тип возвращаемого значения или ключевого слова void; • имя метода;

• список аргументов в круглых скобках (аргументов может не быть); • специальное throws-выражение.

Метод main()

Разработанные приложения на Java обширны и многообразны по структуре и содержанию. Классы могут содержать внутри себя множество методов. Требуется некоторая входная точка, чтобы запустить приложение. Такой входной точкой служит метод main. Для объявления метода main() используется следующий синтаксис:

public static void main(String[] args) {}

Модификатор public нужен, чтобы этот метод был виден исполняющей средой. А модификатор static позволяет вызвать метод main(), не создавая объектов. Метод main() должен быть объявлен как static, так как он должен вызываться прежде, чем будут созданы какие-либо объекты.

Конструкторы Конструктор - это метод класса, обладающий следующими особенностями:

1) имеет такое же название, как и класс;

2) вызывается сам, когда мы создаём объект класса;

3) не возвращает никакого значения;

4) может быть перегружен;

Параметризация методов

Аргументом метода main() является массив строк. Он может заполняться дополнительными параметрами, которые указываются при вызове метода. Пример демонстрирует вывод в консоль параметров, переданных в метод

main. Для запуска примера необходимо передать сами параметры, например


java test.first.Test HelloWorld

package test.first; public class Test {

public static void main(String[] args) {

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

System.out.print(args[i]+" "); }

System.out.println(); } }

Результат работы программы: HelloWorld


Наследование

• Наследование позволяет создавать иерархические классификации.

• Используя наследование, можно создать главный класс, который определяет свойства, общие для набора связанных элементов.

• Класс, который унаследован, называется суперклассом (superclass).

• Класс, который выполняет наследование, называется подклассом (subclass) — это специализированная версия суперкласса. Он наследует все переменные экземпляра и методы, определенные суперклассом, и прибавляет свои собственные уникальные элементы.

• Чтобы наследовать класс, нужно просто включить определение одного класса в другое, используя ключевое слово extends.

• В java отсутствует множественное наследование

Модификаторы доступа при наследовании

При наследовании все поля, методы базового класса переходят (наследуются) др. классом, но доступ к ним (базовым) может быть (public, friendly, protected), а может и не быть (private). Доступ из производного класса к полям и методам базового класса определяет специфика доступа к полю/методу, который указан в базовом классе.

Перегрузка и переопределение методов

Перегрузка работает в рамках одного класса, переопределение – при наследовании.

Перегрузка. Два метода называются перегруженными, если они имеют одинаковое название, но параметры, которые они принимают, отличаются либо по типу, либо по колву. В этом смысл полиморфизма.

Переопределение. При разработке иерархии классов часто возникает необходимость расширить возможности метода, наследуемого из родительского класса. В этом случае в производном Н разработать свой метод родительского класса. Например, если в произв классе метод с тем же именем и типом возвращаемого значения будет иметь разное колво параметров, то будет реализована перегрузка метода.

Использов ключевого слова final

• Ключевое слово final имеет три применения. Первое — его можно использовать для создания эквивалента именованной константы. Два других применения final связаны с наследованием.

• Чтобы отменить переопределение метода, укажите модификатор final в начале его объявления. Методы, объявленные как final, не могут переопределяться.


class A {

final void meth() {

System.out.println("Это метод final.");

} }

class В extends A {

void meth() { // ОШИБКА! Нельзя переопределять.

System.out.println("Ошибка!");

} }


· Поскольку meth о объявлен как final, он не может быть переопределен в классе B. Если вы попытаетесь сделать это, то получите ошибку во время компиляции.

• Иногда нужно разорвать наследственную связь классов (отменить наследование одного класса другим). Чтобы сделать это, предварите объявление класса ключевым словом final, что позволит неявно объявить и все его методы. Недопустимо объявлять класс одновременно как abstract и final.

final class A { //...}

//Следующий класс незаконный.

class В extends А { //ОШИБКА! В не может быть подклассом А

//... }

• Комментарий здесь означает, что в не может наследовать А, т.к. А объявлен как final.

Понятие и использование абстрактных классов, абстрактных методов.

Абстрактные классы

Класс называется абстрактным, если он содержит хотя бы один абстрактный метод. Абстрактный класс может также содержать и неабстрактные методы. Интерфейсы, в отличие от абстрактных классов, содержат только абстрактные методы. Если внутри класса хотя бы один метод объявлён абстрактным, т.е. перед ним написано abstract, то и перед самим классом надо написать abstract.

Нельзя создать экземпляр абстрактного класса, однако мы можем объявить объектную ссылку на данный класс. Это позволяет осуществить полиморфную организацию работы с массивами или со списками объектов производных классов. Суть в том, что можно в объектную ссылку родительского класса записать экземпляр класса потомка (аналог в С++, когда мы устанавливаем указатель базового класса на объект производного класса). Т.к абстрактный класс содержит хотя бы один абстрактный метод (этот метод не имеет тела), то в производном классе этот метод должен быть переопределён.

Абстрактный метод и его реализация


abstract class worker

{ protected int Age;

public String Name;

abstract public void setSalary(int newSalary);

}

class boss extends worker

{ public void setSalary(int newSalary)

{ Salary = newSalary;}

…}

Class engineer extends worker

{int Salary;

public void setSalary(int newSalary)

{Salary=newSalary*0.1;}

…}


Интерфейсы. Определение интерфейсов. Реализация интерфейсов.

Интерфейс- это такой ссылочный тип, членами которого являются константы и абстрактные методы (только абстрактные).

Интерфейс не может быть реализован в виде экземпляра объекта, но его могут и должны реализовывать классы, обеспечивая реализацию его абстрактных методов.

Можно создавать интерфейсные ссылки.

Формальное определение интерфейса:

Модифик_доступа имяинтерфейса{

Тип_возвр_знач имя_мет1(список параметров);

……..


Тип_возвр_знач имя_метn(список параметров);

Тип имя_final_перем1=значен;

……..

Тип имя_final_перемm=значен;

Пример:

public interface MyInt{

Final String str=”Тест интерфейса”;

public int MyMethod(int i);}


Интерфейс позволяет реализовывать множественное наследование и иерархию классов.

Ограничения, накладываемые на интерфейс:

1. Модификатор доступа только public или не используется.

2. Метод интерфейса может быть только абстрактный.

3. Поля (переменные)- final или константы. Они не меняют значения, могут быть static.

4. Интерфейсы не могут иметь реализованных методов. Методы реализуются в классе, реализованном интерфейсом.

Таким образом, интерфейсы позволяют очертить некоторые постоянные характеристики, оставляя реализацию тела методов реализующим классам.


Пример:

class TestInt implements My_Int;{

public int myMethod(int i)

{ if (i==0) return (0);

else return (i*i);

public vpid f1(){}}


Интерфейс может наследовать другой интерфейс. При наследовании методы базового интерфейса переходят в производный интерфейс. Если метода, объявленные в классе, имеют другой список параметров, чем в интерфейсе, то реализуется перегрузка метода, а не реализация метода. Сигнатура метода в интерфейсе и классе должна совпадать.

Примеры применения интерфейсов.


Пример:

public interface MyInt{

Final String str=”Тест интерфейса”;

public int MyMethod(int i);}


Интерфейс позволяет реализовывать множественное наследование и иерархию классов.

Таким образом, интерфейсы позволяют очертить некоторые постоянные характеристики, оставляя реализацию тела методов реализующим классам.


Пример:

class TestInt implements My_Int;{

public int myMethod(int i)

{ if (i==0) return (0);

else return (i*i);

public vpid f1(){}}


Потоки ввода и вывода информации

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

Поток связывается с физическим устройством с помощью системы ввода-вывода.

Ввод - клавиатура - файл - сетевой разъем

Вывод - консоль- файл - сетевое соединение

Благодаря потокам программа может выполнить ввод-вывод, не понимая различий между клавиатурой и сетью. Потоки ввода-вывода определены в пакете java.io.* Import java.io.*

Байтовые и символьные потоки

В Java2 определены 2 типа потоков: байтовые и символьные. Байтовые потоки позволяют осуществить обработку ввода и вывода байтов. Используются при чтении и записи данных в двоичном коде.

Символьные потоки представляют удобные средства для обработки ввода и вывода символов. Они используют универсальную кодировку Unicode. На самом низком уровне весь ввод-вывод всё ещё байтовый.

Классы байтовых потоков Байтовые потоки определяются в двух иерархиях классов. На верху этой иерархии два абстрактных класса: InputStream(абстрактный класс ввода информации) и OutputStream(абстрактный класс вывода информации). Каждый из этих абстрактных классов имеет несколько конкретных подклассов, которые отвечают за ввод-вывод информации в(из) файлов.

Абстрактные классы InputStream и OutputStream определяют несколько ключевых методов, которые реализуются другими поточными классами. Методы read(), write() переопределяются в производных классах.

 

Поточный класс Описание
InputStream OutputStream Абстрактные классы, которые описывают поточный ввод и вывод
BufferedInputStream BufferedOutputStream Буферизированные потоки ввода и вывода
DataInputStream     DataOutputStream Поток ввода, который содержит методы для чтения данных стандартных типов Java; Поток вывода, который содержит методы для записи данных стандартных типов Java
FileInputStream   FileOutputStream Поток ввода, который читает из файла; Поток вывода, который записывает в файл
RandomAccessFile Поддерживает ввод-вывод файла произвольного доступа

Классы символьных потоков

Определены в двух иерархиях классов: Reader и Writer. Они обрабатывают потоки символов Unicode. Абстрактные классы Reader и Writer определяют методы read(), write(), которые реализуются другими поточными классами.

Классы символьных потоков

Имя поточного класса Описание
Reader Writer Абстрактные классы символьного потока ввода и вывода
BufferedReader BufferedWriter Буферизированные символьные потоки ввода и вывода
FileReader   FileWriter Поток ввода, который читает поток символов из файла; Выходной поток, который записывает символы в файл
StringReader   StringWriter Поток ввода, который читает из строки; Поток вывода, который записывает в строку
InputStreamReader   OutputStreamWriter Поток ввода, который переводит байты в символы. Поток вывода, который переводит символы в байты.

Примеры: FileInputStream FileOutputStream

Конструкторы такого класса в качестве параметров принимают название класса, из которого будет производиться считывание/запись. Если в качестве параметра указан несуществующий файл/каталог, то будет брошено java.io.FileNotFoundException.(исключительная ситуация)

Для чтения информации из файла используется метод read- public void read(); Для записи- write()

Для окончания работы с файлом необходимо вызвать метод close(). Это сообщит системе, что работа с файлом закончена.

Пример записи в файл d:\\test.txt Import java.io.*; Class FileWriter{

Public static void main(Stringargs[]) {byte[] bytesToWrite={1,2,3};

Try{ //нач. области обработки исключительной ситуации

FileOutputStream.OutFile=new FileOutputStream(“d:\\test.txt”);

OutFile.Write(bytesToWrite);}

Catch(IOException e)

{…}}}

Работа с файлами

Класс FileInputStream используется для чтения данных из файла. Конструктор такого класса в качестве параметра принимает название файла, из которого будет производиться считывание. При указании строки имени файла нужно учитывать, что она будет напрямую передана операционной системе, поэтому формат имени файла и пути к нему может различаться на разных платформах. Если при вызове этого конструктора передать строку, указывающую на несуществующий файл или каталог, то будет брошено java.io.FileNotFoundException. Если же объект успешно создан, то при вызове его методов read() возвращаемые значения будут считываться из указанного файла.

Для записи байт в файл используется класс FileOutputStream. При создании объектов этого класса, то есть при вызовах его конструкторов, кроме имени файла, также можно указать, будут ли данные дописываться в конец файла, либо файл будет перезаписан. Если указанный файл не существует, то сразу после создания FileOutputStream он будет создан. При вызовах методов write() передаваемые значения будут записываться в этот файл. По окончании работы необходимо вызвать метод close(), чтобы сообщить системе, что работа по записи файла закончена.

Работа со строками (класс String)

Определяется в пакете java lang. Этот пакет не нужно явно импортировать, т.к. он импортируется по умолчанию. Класс String имеет несколько конструкторов:

1. public String()

2. public String(char[] value) создаёт строку из массива символов

3. public String(byte[] bytes) создаёт строку из массива байт, преобразует байты в символы в соответствии с кодировкой

Пример: String str=new String(«Какая-то строка»);

Или String str=«Какая-то строка»; char c=’a’;

Для строк возможна операция сложение. Определена эта операция строки с числом, при чём сначала число преобразуется в строку, а потом выполняется сложение строк. Также определена операция сложения строки с любым объектом. Сначала для объекта вызывается метод toString(),а потом происходит сложение.

Пример:

int x=10; System.out.println(“результат=”+x); результат=10

Методы, которые определены для класса String(вызываются через точку):

1. public char charAt (int index)- выбирает из строки символ с индексом index. Индексы в троке нумеруются с 0

2. public int compareTo(String AnotherString)- сравнивает строку с другой строкой. Если равны, то 0; если нет,то < или>0

3. public int indexOf(int ch)-ищет символ в строке

4. public int indexOf(String str)- ищет строку str в данной строке

5. public int length()-возвращает длину строки

6. public String substring(int beginindex, int endindex)- выделяет подстроки из строк с начальным и конечным индексами

7. набор методов valueOf(…) – позволяет переводить значения различных типов в строки


Пример:

static void testString();

{ char ch=str1.charAt(3);

int i=str1.indexOf(‘s’);

int c=str1.compareTo(str2);

int l=str1.length();

String sub=str1.substring (2,5);

s=str.valueOf(inttest);s=str.valueOf(doubletest);

s=str.valueOf(chartest);s=str.valueOf(booleantest);

public static void main (String args[])

{testString();}}


Преобразование строки в число

B Java есть достаточно просто способ преобразования строк в числа.

В класс Byte,Short,Integer,Long определены методы parseByte(),parseShort()…Эти методы возвращают byte-,short-,int-,long- эквивалентно числовой строки, с которой они вызываются. Подобный метод существует и для классов Double, Float. Пример:String str=”123”;int i=Integer.parseInt(str);

Обработки исключительнх ситуаций. Основные принципы обработки исключений..

Искл. Ситу -это аварийные ситуации, которые могут возникнуть во время выполнения программы.

Существуют следующие причины возникновения исключительных ситуаций:

- попытка выполнить некорректное выражение(попытка использовать класс, которого не существует);

- всевозможные сбои внутри самой виртуальной машины;

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

Исключения, порождённые от java lang Exeption являются обрабатываемыми, т.е. во время компиляции проверяется предусмотренная обработка возможный исключительных ситуаций (try, catch, throw, throws): обрабатываться должны исключительные ситуации, связанные с вводом-выводом информации или с пакетом java.io. Так же обрабатываться должны исключительные ситуации, связанные с БД(SQL).

Java lang Error не является обрабатываемой

Использование операторов try-catch-finally, throw и throws.Конструкция try-catch

try{}catch(SomeExeptionClass e){…….}

catch(AratheExeptionClass e){}

Эта конструкция работает следующим образом: сразу работает код, находящийся в try. Если во время его выполнения не происходит никаких исключительных ситуаций, то выполнение передаётся за последнюю закрывающую } после catch этого try. Если же возникает ошибка, то выполнение кода происходит по следующему сценарию:

1.если возникает исключительная ситуация, класс которой указан, то выполняется тот catch, с которым связана операция;

2.если класс не указан, то try завершится внештатно;

Конструкция try-catch-finally

Finally предназначен, чтобы обеспечивать гарантию выполнения какого-либо фрагмента кода try. Последовательность выполнения этой конструкции следующая:

Если оператор try нормально, то будет выполнен блок finally. Если оператор finally выполняется нормально, то весь оператор try выполнен нормально. Если происходит преждевременное окончание выполнения блока finally, то весь оператор try завершится предварительно. Бло кода, ассоциированный с finally, будет выполняться всегда. Если в try ошибка, то её перехватит catch.

try{byte[]buffer=newbyte[128];

FileInputStream fis=new FileInputStream(“file.txt”);

while (fis.read (buffer)>0) {обраб. данных}}

catch (IOExeption es){обраб.исключ}finally{fis.flush();fis.close();}

Использование оператора throw и throws

Программист иногда сам может определить исключительную ситуацию, которая может быть сгенерирована программой. Сделать это можно при помощи оператора throw.

public int calculate {int Value{

if (Value<0){

throw new Exeption(“Параметры строки”);

}}

Оператор throw используется как альтернатива оператору try, только он используется не внутри метода, а после объявления метода.

Основные работы в сети. Адресация в Интернет.

С помощью средств Java можно:

1) Получить информацию с одной машины и переместить её на другую машину.

2) Подключиться к базе данных, находящейся в сети. Выполняется с помощью библиотеки Java DataBase Connectivity (JDBC).

3) Представление услуг через web-сервер. Достигается через какой-либо web-сервер, который поддерживает технологию Java-сервлетов и Java Server Pages (JSP).

4) Удалённый запуск методов объектов Java на других компьютерах. Выполняется с помощью Remote Method Invocation (RMI) – удалённый вызов методов.

5) Использовать код, написанный на других языках и работающий в других архитектурах. Позволяет технология CORBA (Common Object Request Broker Architecture) – общая архитектура брокеров объектных запросов.

6) Изолировать бизнес-логику от соединения, особенно соединения с БД, включающего обработку транзакций и безопасность в корпоративных клиент-серверных системах. Реализуется при помощи EJB (Enterprise JavaBeans).

7) Простое динамическое добавление, использование и удаление устройств бытового оборудования и программного обслуживания, обеспечивающих определенный сервис для клиента сети. Обеспечивается при помощи Jini.

Понятие клиента и сервера

Компьютерная сеть представляет собой несколько компьютеров, объединённых между собой кабелем.

Взаимодействия приложений в сети осуществляются по определённым правилам. Эти правила называются протоколами. Примеры протоколов:- TCP/IP, - VDP, - FTP, - SMTP, - POP3,

- HTTP

Центральными понятиями в любой сети являются понятия сервера и клиента. Сервер- это всё то, что имеет некоторый разделяемый ресурс.

Существует 2 вида серверов: последовательный и параллельный.

Последовательный - обрабатывает запросы клиента на установленные соединения после того, как отрабатывает предыдущий клиент(последовательно). Таким образом, на сервере образуется очередь.

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

Существуют различные типы серверов:

· Вычислительные серверы (они обеспечивают вычислительную функцию)

· Серверы печати (управляют совокупностью принтеров)

· Дисковые серверы (предоставляют работающее в сети дисковое пространство)

· Web-серверы (хранят web-страницы)

Клиент – это просто любой другой объект, который хочет получить доступ к серверу.

Сокет в переводе означает гнездо, разъём. Это программная абстракция, используемая для представления терминалов соединений между двумя машинами. Для соединений существует сокет на каждой машине. При работе в сети IPадреса недостаточно для однозначной идентификации хоста, т.к. может существовать много служб на 1й машине, поэтому для однозначной идентификации вводится понятие порт.

Адресация в сетях: с уществует 3 типа адресов:

1) локальный адрес узла, определяемый технологией, с помощью которой построена отдельная сеть, в которую входит данный узел

Для узлов, входящих в локальные сети, МАС-адрес сетевого адаптера или порта - маршрутизатора.

НП- 11-АО-17-3D-BC-01 (16-ричные)

Эти адреса назначаются производителями оборудования и являются уникальными.

Первые старшие 3 байта –идентификатор фирмы производителя. Младшие 3- назначаются самой фирмой производителем;

2)адрес состоит из 4 байт; НП:

109.26.17.100. Назначается администратором во время конфигурации сети. Состоит из 2х частей: № сети и № узла.

28-30. Организация сетевых соединений с устан-ем соед-ий по TCP/IP. Сокеты TCP/IP клиентов. Сокеты TCP/IP серверов.

Протокол TCP/IP (Transmission Control Protocol) – протокол управления передачей данных. Определяет правила их передачи в сети, в соответствии с которыми между двумя узлами устанавливается логическая связь- выделяется канал сети для передачи данных и информация передаётся в виде байтовых потоков. Этот протокол обеспечивает гарантированную доставку данных. Его недостаток- сильно загружает сеть. UDP (User Datagramm Protocol) – дейтограммный протокол пользователя. Он следует за протоколом TCP, обеспечивает ненадёжную доставку дейтограмм. При этом не нужно выделять канал связи, следовательно сеть менее загружена.

Дейтограмма- это квант информации, передаваемой по сети, содержащая помимо информации ещё и адреса отправителя и получателя. Это альтернатива протоколу ТСР.

Сокет в переводе означает гнездо, разъём. Это программная абстракция, используемая для представления терминалов соединений между двумя машинами. Для соединений существует сокет на каждой машине.

Сокеты серверов, работающих по протоколу TCP/IP

Для организации сокетов серверов используется класс ServerSocket. (используется для создания серверов, которые прослушивают либо локальные, либо удалённые программы клиента).

Конструкторы класса ServerSocket:

1) ServerSocket (int port) – создаёт сокет на локальном хосте с портом, который указан в качестве параметра;

2) ServerSocket (int port, int maxQueue) – создаёт сокет с указанным портом и длиной очереди max;

Класс ServerSocket для создания отдельного сокета, для обработки запроса клиента имеет метод accept(), который является блокирующим вызовом: сервер будет ждать запроса клиента на установление соединения, чтобы инициализировать с ним связь. В результате вызова этого метода создаётся объект класса Socket. Начиная с этого момента появляется соединение Socket –Socket.

НП:

ServerSocket http Server=new ServerSocket(1280);

Socket Sock=http Server.accept();

InputStream is=sock.get InputStream();// получение входного потока объекта Socket

OutputStream os=sock.get OutputStream();//получение выходного потока

int c=is.read();//чтение байта из входного потока

os.write();//запись байта в выходной поток

Сокеты клиентов (TCP/IP)

Для организации используется конструктор Socket:

1) Socket(String hostname, int port) создаёт сокет с указанным хостом и портом

2) Socket(InetAdress ipAdress, int port) создаёт сокет с адресом, указанным в ipAdress и портом

Socket clsock=new Socket(“localhost”,1280);

InputStream is=clsock.get InputStream();

OutputStream os=clsock.get OutputStream();

os.write(8);

int c=is.read();

Приложение клиента- это отдельное от сервера приложение, т.е. оно написано в отдельном файле, имеющем свою функцию main(). Могут запускаться на различных компьютерах. Если запускаются на одном, то эти приложения имеют своё адресное пространство(не видят друг друга).


Дата добавления: 2015-10-29; просмотров: 139 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Диего рассказывает, как написать простейшую программу| Сборка мусора

mybiblioteka.su - 2015-2024 год. (0.05 сек.)