Написанні клієнтської и серверної програми для обміну інформацією через сокети в середовищі Visual C++

Страницы работы

Содержание работы

Міністерство науки та освіти, молоді та спорту України

Сумський Державний Університет

Кафедра комп’ютерних наук

ОБОВ’ЯЗКОВЕ ДОМАШНЄ ЗАВДАННЯ

з дисципліни

Комп’ютерні мережі

ВАРІАНТ 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 -  Вікно клієнту


Додаток 1. Лістинг Сервера

import java.io.*;

import java.net.*;

public class Server {

    public static void main(String[] args) {

        ServerSocket ss = null;

        Socket client = null;

        DataInputStream is = null;

        DataOutputStream os = null;

        double s=0, k;

        try {

            ss = new ServerSocket(Integer.valueOf(args[0]));

            System.out.println("Server starter on port "+args[0]);

            client = ss.accept();

            System.out.println("Client connected");

            is = new DataInputStream(new BufferedInputStream(client.getInputStream()));

            os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));

            for(int i=0; i<3; i++)

            {

                for(int j=0; j<3; j++)

                {

                    k=is.readDouble();

                    if (k>0)

                        s+=k;

                    System.out.print(k+" ");

                }

                System.out.println();

            }

            System.out.println("All data reserved! Server proccesed request and will send to client - "+s);

            os.writeDouble(s);

            os.flush();

            System.out.println("All data were sent");

        } catch(IOException e) {

            System.out.println("Problems with connection of client");

        } 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 (client!=null)

                    client.close();

            } catch (IOException e) {

                System.out.println("Error when close Socket");

            }

            try {

                if (ss!=null)

                    ss.close();

            } catch(IOException e) {

                System.out.println("Error when close ServerSocket");

            }

        }

    }

}
Додаток 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");

            }

        }

    }

}

Висновок

Була розроблений додаток для обміну даними між клієнтом та сервером.

Обмін даними відбувається за допомогою сокетів. Під час написання цього додатку навчилася створювати сокети, приймати та передавати інформацію, оброблювати цю інформацію та правильно закривати сокети. Написана програма правильно зчитує дані, виконує обрахунки та передає дані.

Похожие материалы

Информация о работе

Тип:
Домашние задания
Размер файла:
245 Kb
Скачали:
0