- •30.Общее представление о потоках ввода/вывода
- •31.Байтовые и символьные потоки
- •32. Определение файла. Тестирование проверка объектов File
- •34. Сериализация
- •35. Обработка исключений в Java
- •36. Многопоточное программирование
- •37. Создание потока и его жизненный цикл
- •40. Методы synchronized
- •38. Управление приоритетами и ThreadGroup
- •39. Потоки-демоны
- •41. Коллекции
- •42. Списки
- •43. 43. Множества
- •44. Карты отображений
- •45. Обзор сокетов
- •49. Дейтаграммы
- •46. Сетевые классы и интерфейсы 47. Производственные методы 48. Сокеты tcp/ip клиентов и серверов
- •50. Основы оконной графики 51. Иерархия классов awt
- •Класс Applet
- •52. Свойства класса Component
- •53. Класс Container
- •54. Наследники класса Component
- •55. Классы Choice и List
- •56. Классы TextComponent, TextField, TextArea
- •57. Наследники Container
- •58. Swing-технология
- •59. Обработка событий в Java
- •60. Классы-адаптеры
- •61. Понятие и терминология jdbc 62. Связь и различия jdbc и odbc
- •63. Драйвера, соединения и запросы
- •64. DriverManager
- •65. Создание соединения с источником данных
- •66. Интерфейсы Statement, PreparedStatement и CallableStatement
- •69. Использование потоков в апплетах
- •70. Основы xml
- •71. Xml. Схема dtd. Элемент Schema схемы xml
- •72. Ссылки xml
- •74. Язык xLink (Атрибуты связующих элементов xLink, возможные значения атрибута xlink:show, возможные значения атрибута xlink:actuate)
- •75. Язык xPointer (Синтаксис xPointer, элементы абсолютного обнаружения xPointer, выражения отношений, фильтры атрибутов и их значений)
- •76. Объектная модель документа xml – dom
- •77. Simple api для xml (sax)
- •78. Язык преобразований xslt (Операционный xslt, процесс преобразования xsl, использование xslt, преобразования xml в html)
- •80. Сервлеты: структура, назначение и преимущества
- •81. Жизненный цикл сервлета
- •83. Пакеты javax.Servlet и javax.Servlet.Http
- •84. Технология rmi. Сравнение распределенных и нераспределенных приложений
- •85. Архитектура rmi
46. Сетевые классы и интерфейсы 47. Производственные методы 48. Сокеты tcp/ip клиентов и серверов
Для создания сокетов серверов используется класс ServerSocket. Указанный класс используется для создания серверов, которые прослушивают либо локальные, либо удаленные программы клиента, чтобы соединяться с ними на опубликованных портах.
Конструкторы класса ServerSocket:
ServerSocket(int port)– создает сокет сервера на указанном порте с длиной очереди по умолчанию 50.
ServerSocket(int port, int maxQueue)– создает сокет сервера на указанном порте с максимальной длиной очереди maxQueue.
ServerSocket(int port, int maxQueue, InetAddress localAddress)– создает сокет сервера на указанном порте с максимальной длиной очереди maxQueue.
Класс ServerSocket имеет метод accept(), который является блокирующим вызовом: сервер будет ждать клиента, чтобы инициализировать связь, и затем вернет нормальный Socket-объект, который будет использоваться для связи с клиентом.
Как только клиент создает соединение по сокету, ServerSocket возвращает с помощью метода accept() соответствующий клиенту объект Socket на сервере, по которому будет происходить связь со стороны сервера. Начиная с этого момента, появляется соединение сокет – сокет, и можно считать эти соединения одинаковыми, т.к. они действительно одинаковые.
ServerSocket httpServer=new ServerSocket(port);//создание сокета
//сервера
Socket reg=httpServer.accept(); //Прослушивание (ожидание
// запроса на соединения)
// Прием содержания соединения клиента
….
//Отправка клиенту сообщения
…
//Разрыв соединения
В представленном коде после установки соединения с клиентом метод accept() возвращает объект класса Socket (в данном случае reg), с помощью которого можно создавать и использовать байтовые и символьные потоки для обмена данными с клиентами. Для этого с гнездом связываются входной и выходной потоки, которые реализуются с помощью классов InputStream и OutputStream:
InputStream inputstream = reg.getInputStream();//получение
//входного потока
OutputStream outputstream = reg.getOutputStream();//получение
//выходного потока
Для создания сокета клиента используется конструктор:
Socket(String hostname, int port)– создает сокет, соединяющий локальную хост-машину с именованной хост-машиной и портом; может выбрасывать исключение UnknownHostException или IOException.
Socket(InetAddress ipAddress, int port)– создает сокет, аналогичный предыдущему, но используется уже существующий объект класса InetAddres и порт; может выбрасывать исключение IOException.
Сокет может в любое время просматривать связанную с ним адресную и портовую информацию при помощи методов, представленных в табл. 3. 1.
Таблица 3.1
Методы просмотра адресной и портовой информации
|
Метод |
Описание |
|
InetAddress getInetAddress() |
Возвращает InetAddress-объект, связанный с Socket-объектом |
|
int getPort() |
Возвращает удаленный порт, с которым соединен данный Socket-объект |
|
int getLocalPort() |
Возвращает локальный порт, с котрым соединен данный Socket-объект |
После создания Socket-объект можно применять для получения доступа к связанным с ним потокам ввода/вывода. Данные потоки используются точно также как потоки ввода/вывода, описанные в лабораторной 1.
Рассмотрим пример. Необходимо создать приложение клиент-сервер, в котором клиент считывает строку с клавиатуры, отображает ее на экране, передает ее серверу, сервер отображает ее на экране, переводит в верхний регистр и передает клиенту, который, в свою очередь, снова отображает ее на экране.
