Міністерство науки та освіти, молоді та спорту України
Сумський Державний Університет
Кафедра комп’ютерних наук
ОБОВ’ЯЗКОВЕ ДОМАШНЄ ЗАВДАННЯ
з дисципліни
Комп’ютерні мережі
ВАРІАНТ 10
Виконала:
студентка групи ІН-91
Татарченко А.С.
Перевірив: Ободяк В. К.
Суми 2010
Зміст……………………………………………………………………………………………………………………………………………………………………2
1. Постановка задачі………………………………………………………………………………………………………………………………………….3
2. Описання виконання роботи…………………………………………………………………………………………………………………………4
3 Зовнішній вигляд програми……………………………………………………………………………………………………………………………5
Додаток 1. Лістинг Сервера……………………………………………………………………………………………………………………………….6
Додаток 2. Лістинг Клієнта…………………………………………………………………………………………………………………………………9
4. Висновок ………………………………………………………………………………………………………………………………………………………10
В середовищі Visual C++ написати клієнтську и серверну програми для обміну інформацією через сокети.
Варіант обміну
№ |
Клієнт посилає серверу |
Сервер повертає клієнту |
10 |
матрицу [3×3] |
сумму положительных элементов матрицы |
Описання виконання роботи
Програма була розроблена мовою Java. Мова Java вибрана через простоту реалізації обміну даних між клієнтом та сервером.
У програмі є два класси: Server.java та Client.java, які відповідають за серверну та клієнтську частину програми.
Клієнт:
Підключається до серверу за допомогою сокета. Створює 2 потоки даних : вхідний в сокет, вихідний з сокету. Для цього використовуються методи getInputStream(), getOutputStream() .
Відправляє ці дані серверу і чекає відповіді.
Сервер:
Створює серверний сокет . Очікує підключення клієнта.
Якщо клієнт підключився, то створює клієнтський сонет. Створює потоки вводу та виводу в сокет. Отримує дані з сокета.
Рахує суму додатніх елементів матриці 3х3. Результат відправляє клієнту.
Сервер і клієнт працюють на одному порту, який повинен бути більшим за 1024 (для того, щоб програма коректно працювала у UNIX – подібних системах).
Під час роботи сервера або клієнта можливі ситуації, коли програма може повести себе не коректно, з помилками. Через це, можливі помилки обробляються і виводяться відповідні повідомлення на екран. Це робиться за допомогою блоків try, catch, finally.
Для роботи з сокетом та потоками даних використовувались наступні методи:
flush() – очищає потік
accept() – очікує підключення і у разі успішного підключення клієнта створює сокет.
Close() – закриває потік або сокет.
Рис. 1 - Вікно серверу
Рис. 2 - Вікно клієнту
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
Socket s = null;
DataInputStream is = null;
DataOutputStream os = null;
double res;
double[][] m = {{-1, 2, 3}, {-4, 5, 6}, {7, 8, 9}};
try {
s = new Socket(args[0], Integer.valueOf(args[1]));
System.out.println("Connected!");
is = new DataInputStream(new BufferedInputStream(s.getInputStream()));
os = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
os.writeDouble(m[i][j]);
os.flush();
System.out.println("All data were sent");
res=is.readDouble();
System.out.println("Result = "+res);
} catch(UnknownHostException e) {
System.out.println("Uknown host! Input another host.");
} catch(IOException e) {
System.out.println("Problems with connection");
} finally {
try {
if (is!=null)
is.close();
} catch (IOException e) {
System.out.println("Error when close input stream");
}
try {
if (os!=null)
os.close();
} catch (IOException e) {
System.out.println("Error when close output stream");
}
try {
if (s!=null)
s.close();
} catch (IOException e) {
System.out.println("Error when close Socket");
}
}
}
}
Висновок
Була розроблений додаток для обміну даними між клієнтом та сервером.
Обмін даними відбувається за допомогою сокетів. Під час написання цього додатку навчилася створювати сокети, приймати та передавати інформацію, оброблювати цю інформацію та правильно закривати сокети. Написана програма правильно зчитує дані, виконує обрахунки та передає дані.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.