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

Приклад: віддалене читання файлу

До складу багатьох обчислювальних систем входять робочі станції, що використовуються окремими людьми і розподіленими серверами для збереження файлів, доступу до Internet і т.п. Припустимо, що клієнтські додатки виконуються на робочих станціях, зв'язаних з машиною, на якій установлений файловий сервер (серверна машина). Він забезпечує доступ до файлової системи, розташованої на локальних дисках. (Будемо припускати, що серверна машина працює під керуванням операційної системи Unix і використовує її файлову систему). Коли клієнт хоче прочитати файл, що зберігається на серверній машині, він зв'язується з серверним процесом, який на неї виконується. Клієнт відправляє серверові ім'я файлу, що він хоче прочитати. За умови, що файл може бути відкритий, сервер зчитує рядки файлу і відправляє їх клієнтові.

 

Сервер читання файлів мовою Java

У лістину, що наведений нижче, представлений код мовою Java для процесу-сервера. Сервер спочатку створює серверний сокет і чекає з'єднання через порт 9999. (Порт - це унікальний номер, що використовується клієнтами і серверами для того, щоб розрізнити конкретне мережне з'єднання.) Потім сервер чекає зв'язку з клієнтом. Далі сервер створює вхідний і вихідний потоки, що використовують сокет. Одержавши від клієнта ім'я файлу, сервер відкриває зазначений файл. Якщо цього файлу нема, сервер відправляє клієнтові повідомлення про помилку, закриває потоки і сокет і чекає наступного підключення клієнта. Якщо файл існує, сервер зчитує рядки файлу і відправляє їх клієнтові (використовуючи метод println()). При досягненні кінця файлу сервер закриває потоки і сокет і чекає наступного підключення клієнта. Якщо виникає виключна ситуація, сервер виводить повідомлення про помилку і завершує свою роботу.

import java.io.*; import java.net.*; public class FileReaderServer {   public static void main( String args[]) {     try { // створити серверний сокет й очикувати під'єднання до порту 9999       ServerSocket listen = new ServerSocket( 9999);       while (true) {         System.out.println( "Connection waiting ...");         Socket socket = listen.accept(); // чекати клієнта, створити вхідний і вихідний // потоки для обміну даними з клієнтом         BufferedReader from_client = new BufferedReader(                 new InputStreamReader( socket.getInputStream()));         PrintWriter to_client = new PrintWriter( socket.getOutputStream()); // отримати від клієнта им'я файлу і преревірити його існування         String filename = from_client.readLine();         File inputFile = new File( filename);         if (!inputFile.exists()) {           to_client.println( "Unable to open file: " + filename);           to_client.close();           from_client.close();           socket.close();           continue;           } // читати рядки файлу і відправляти їх клієнту         System.out.println( "reading from file " + filename);         BufferedReader input = new BufferedReader( new FileReader( inputFile));         String line;         while ((line = input.readLine()) != null) {           to_client.println( line);           }         to_client.close();         from_client.close();         socket.close();         }       }     catch (Exception e) { // повідомляти про будь-яке виключення       System.err.println( e.toString());       }     }   }