Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

5 Приложения ServerSocketApp и ClientSocketApp

Задание. На основе текстов приложений Server-Client (пример 1) создать приложения ServerSocketApp-ClientSocketApp, иллюстрирующие работу с потоковыми сокетами.

До ввода пользователем строки «QUIT» (или «quit») приложение ClientSocketApp должно в цикле: через свой входной поток получать от сервера количество переданных серверу строк (массивов байт); печатать это число; давать возможность пользователю ввести строку на консоли, помещая ее в массив байт; передавать этот массив байт серверу посредством записи его в свой выходной поток; преобразовывать массив байт в строку и в случае получения строки «QUIT» (или «quit») прекращать свою работу.

В свою очередь приложение ServerSocketApp в цикле должно: считывать из своего входного потока массив байт, переданный ему клиентом; преобразовывать массив байт в строку; печатать строку; в случае получения строки «QUIT» (или «quit») прекращать свою работу, иначе увеличивать количество переданных ему массивов байт и записывать это число в свой выходной поток для передачи его клиенту.

Методические указания. При создании приложений ServerSocketApp-ClientSocketApp воспользоваться методами ввода с консоли массива байт, создания строки на основе этого массива байт и выделения значащих символов из строк, как это сделано в приложениях ServerDatagram-ClientDatagram (пример 2).

Метод main() приложения ClientSocketApp (модификация метода main() приложения Client)

Добавим описание следующих переменных:

byte buf[]=new byte[512]; // буфер для передачи данных

String str; StringTokenizer strFull; // для выделения из буфера строки

В качестве запуска процесса передачи данными поместим в выходной поток клиента dataOut для передачи серверу не нулевой символ, как раньше, а строку "\r\n", вызывая для объекта dataOut последовательно методы writeChars() и flush().

В цикле до тех пор, пока переменная quit не равна true, сделаем следующие действия:

  • чтение целого числа из входного потока клиента dataIn методом readInt();

  • печать этого числа методом System.out.println();

  • чтение байтов, вводимых пользователем с консоли, в буфер buf методом System.in.read();

  • если количество прочитанных байт (выдаваемых методом read()) равно 1 (введен только символ перевода строки), то перейти к следующей итерации цикла;

  • удалить незначащие байты массива buf, помещая полученную строку в str (см. приложение ClientDatagram);

  • если строка str равна строке «QUIT» (или «quit»), то присвоить переменной quit значение true;

  • поместить в выходной поток клиента dataOut для передачи серверу массив байтов buf, вызывая для объекта dataOut последовательно методы write() и flush().

Метод main() приложения ServerSocketApp (модификация метода main() приложения Server)

Добавим описание следующих переменных:

byte buf[]=new byte[512]; // буфер для получаемых данных

String str; StringTokenizer strFull; // для выделения из буфера строки

В цикле до тех пор, пока переменная quit не равна true, сделаем следующие действия:

  • чтение массива байт, переданного клиентом, из входного потока сервера dataIn методом read() в массив buf;

  • удалить незначащие байты массива buf, помещая полученную строку в str (см. приложение ServerDatagram);

  • печать полученной строки методом System.out.println();

  • если строка str равна строке «QUIT» (или «quit»), то присвоить переменной quit значение true;

  • иначе увеличить счетчик count; передать значение count клиенту, вызывая для объекта dataOut последовательно методы writeInt() и flush().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]