Основные методы класса ServerSocket
После того как экземпляр класса будет создан, его можно будет отправлять, для этого используем класс ObjectOutputStream. Этот класс позволяет отправлять данные объектом, который реализуют интерфейс java.io.Serializable. Создание переменой, присвоенной экземпляру класса ObjectOutputStream, с помощью которой в дальнейшем будет осуществляться передача данных. ObjectOutputStream использует в качестве… Читать ещё >
Основные методы класса ServerSocket (реферат, курсовая, диплом, контрольная)
- — accept () — возвращает экземпляр класса Socket, с которым в дальнейшем будет работа по обмену данными. Данный метод ожидает подключения к созданной ServerSocket (к открытому порту, описанному при создании ServerSocket), пока подключение не произошло, находится в состоянии ожидания.
- — close () — метод завершения работы серверной сокеты, после выполнения этого метода дальнейшее взаимодействие с объектом ServerSocket невозможно.
Обычно программная часть сервера и клиента не сильно отличаются друг от друга:
Сервер:
ServerSocketserverSocket = new ServerSocket (12 345);
Socket socket = serverSocket. accept ();
Клиент:
Socketsocket = newSocket («localhost», 12 345);
Дальнейшее взаимодействие осуществляется непосредственно с объектом сокеты.
Работа с входящим и исходящим потоком байт
Основные методы, необходимые для сокеты — это передача данных, то есть получение и отправление потока данных:
- — для получения потока входящих данных нужно использовать метод getlnputStreamO. InputStream — абстрактный класс, задающий используемую в Java модель входных потоков;
- — для отправки исходящего потока данных нужно использовать метод getOutputStream (). OutputStream — абстрактный класс. Он задает модель выходных потоков Java.
getlnputStreamO и getOutputStream () возвращают поток байт, с которыми не очень удобно, для этого существует множество стандартных классов, которые помогают представить входящий (исходящий) поток в более удобном для нас формате, например: в виде String, class,. Перечислим основные классы, которые могут использоваться для преобразования потока байт в другой формат и выступать в качестве обертки: ObjectlnputStream и ObjectOutputStream позволяют передавать/получать ранее сериализированные объекты, то есть мы можем передавать ранее сформированный экземпляр класса и получить его на другой стороне как структурированный объект.
Пример:
Листинг класс Student, который хранит два значения: имя, возраст; и метод getTitle (), возвращает некоторую структурированную информацию о содержании класса. Данный класс реализует интерфейс Serializable. Serialization, предоставляет стандартный механизм для создания сериализуемых объектов. Сериализация — это процесс сохранения состояния объекта в последовательность байт.
Пример POJO-класса Student:
- 1. Public class Student implements Serializable {
- 2. Private String пате;//Имя
- 3. private Integer age;//Bo3pacT
- 4. public String getNameO {
- 5. return name;
- 6. }
- 7. public void setName (String name) {
- 8. this.name = name;
- 9. }
- 10. public Integer getAge () {
- 11. return age;
- 12.}
- 13. public void setAge (Integer age) {
- 14. this. age = age;
- 15. }
- 16. public String getTitle () {
- 17. return getName ()+" «+ getAge ();
- 18. }
- 19. }
Действия отправителя объекта через сокету.
При отправке объекта изначально его необходимо создать и заполнить данными. Для этого создается экземпляр класса Student и заполняется данными.
- 1. Student student = new Student ();
- 2. student. setAge (18);
- 3. student. setName («Mr.Smith»);
После того как экземпляр класса будет создан, его можно будет отправлять, для этого используем класс ObjectOutputStream. Этот класс позволяет отправлять данные объектом, который реализуют интерфейс java.io.Serializable. Создание переменой, присвоенной экземпляру класса ObjectOutputStream, с помощью которой в дальнейшем будет осуществляться передача данных. ObjectOutputStream использует в качестве ресурса выходной поток данных ранее созданной сокеты.
- 1. ObjectOutputStream out = new ObjectOutputStream (socket. getOutputStreamO);
- 2. out. writeObject (student);//происходит отправление объекта
Действия принятия объекта через сокету.
Для того чтобы принять объект, нужно использовать класс ObjectlnputStream, он позволяет входящие данные принимать в виде объекта, а не потока байт. Для этого создаем экземпляр класса ObjectlnputStream, а в качестве входного параметра используем входной поток данных ранее созданной сокеты.
- 1. ObjectlnputStream in = new ObjectlnputStream (socket. getlnputStreamO);
- 2. try{
- 3. Student student = (Student)in.readObject ();//muiy4eHHe объекта Student
- 4. System.out.println (5П^ет^ебШе ());//использование метода getTitleQ класса Student, для вывода результатов на консоль
- 5. } catch (ClassNotFoundException е) {
- 6. e. printStackTraceO;
- 7. }
В результате выполнения данных операций на экране принимающей стороны должна появиться надпись «Mr.Smith 18».
Работа с входным потоком данных как со строками.
InputStreamReader является мостом между потоком байт и потоком символов. Несет в себе информацию о кодировке (сам производит кодировку и декодировку, например UTF-8). Для создания экземпляра класса InputStreamReader на вход необходимо подать класс InputStream, например System. in или socket.getlnputStream.
BufferedReader буферизует символы и позволяет извлекать из потока как сформированные строки, так и просто символы. Для создания экземпляра класса необходимо поместить в него любой класс, реализующий абстрактный класс Reader. Например, InputStreamReader, StringReader. Пример:
- 1. InputStreamReader isr = new InputStreamReader (System, in);//преобразование входного потока байт
- 2. BufferedReader br = new BufferedReader 05г);//буферизация символов
- 3. while (true){
- 4. String st = br. readLine ();//4TeHHe из буфера строку
- 5. if (st==null)
- 6. {
- 7. break;
- 8. }
- 9. }
Работа с исходящим потоком данных как со строками.
PrintWriter позволяет введенный печатный текст представить к байтовому потоку вывода. Для создания экземпляра класса необходимо иметь входные параметры наследников абстрактного класса Writer (например OutputStreamWriter) или классов, реализующих интерфейсы Closeable, Flushable (например: OutputStream). Пример:
- 1. PrintWriter printWriter = new PrintWriter (socket.getOutput StreamO, true);
- 2. printWriter. println («Bвeдитe значение a:» ;