Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые отчеты (2020) / Java. Лабораторная работа 9.pdf
Скачиваний:
61
Добавлен:
29.01.2021
Размер:
593.3 Кб
Скачать

Результат компиляции и запуска приведен на рис. 3.

Рисунок 3 — Компиляция и запуск VarArgsExTest.java Задание №6.

Напишем клиентскую часть сетевого приложения, формирующую 2 вектора (считывающую их из консоли), устанавливающую соединение с сервером и отправляющую вектора на сервер. Принимаемый клиентом от сервера результат будем выводить на консоль.

Код приведен в табл. 8. Таблица 8 — Код Client.java

import vectors.Array; import vectors.IVector; import vectors.Vectors;

import java.io.*;

import java.net.InetAddress; import java.net.Socket; import java.util.Scanner;

public class Client {

private static final int PORT = 8080;

private static IVector stringToVector(String strVector) throws Exception

{

String[] array = strVector.split("[,;\\s]+"); IVector resultVector = new Array(array.length); for (int i = 0; i < array.length; ++i) {

resultVector.set(i, Double.parseDouble(array[i]));

}

return resultVector;

}

public static void main(String[] args) { Socket socket = null;

try {

InetAddress inetAddress = InetAddress.getByName("localhost");

11

socket = new Socket(inetAddress, PORT); InputStream sin = socket.getInputStream(); OutputStream sout = socket.getOutputStream(); DataInputStream in = new DataInputStream(sin); DataOutputStream out = new DataOutputStream(sout); Scanner scanner = new Scanner(System.in); System.out.println("Введите первый вектор:"); IVector firstVector;

while (true) { try {

firstVector = stringToVector(scanner.nextLine()); } catch (Exception e) {

System.out.println("Вектор введен неверно.\nПопробуйте

снова:");

continue;

}

break;

}

System.out.println("Введите второй вектор:"); IVector secondVector;

while (true) { try {

secondVector = stringToVector(scanner.nextLine()); } catch (Exception e) {

System.out.println("Вектор введен неверно.\nПопробуйте

снова:");

continue;

}

break;

}

Vectors.outputVector(firstVector, out); Vectors.outputVector(secondVector, out); out.flush();

String status = in.readUTF(); if (status.equals("OK")) {

IVector resultVector = Vectors.inputVector(in); System.out.println("Результат: "); resultVector.print();

} else if (status.equals("ERROR")) { System.out.println("Сервер прислал известие об ошибке");

} else {

System.out.println("Нераспознанное сообщение от сервера: " +

status);

}

}catch (IOException e) { e.printStackTrace();

}finally {

try {

if (socket != null) { socket.close();

}

} catch (IOException e) { e.printStackTrace();

}

}

}

}

12

Задание №7.

Напишем серверную часть сетевого приложения, прослушивающую порт, при подключении получающую 2 вектора, выполняющую их сумму и возвращающую результат клиенту. В случае возникновения исключения клиенту отправляется сообщение об ошибке.

Код приведен в табл. 9. Таблица 9 — Код Server.java

import vectors.IVector; import vectors.Vectors;

import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket;

public class Server extends Thread { private static final int PORT = 8080; private Socket socket;

public Server() {}

public static void main(String[] args) { ServerSocket serverSocket = null; try {

InetAddress inetAddress = InetAddress.getByName("localhost"); serverSocket = new ServerSocket(PORT, 0, inetAddress);

while (true) {

Socket socket = serverSocket.accept(); System.err.println("Client accepted"); new Server().setSocket(socket);

}

}catch (IOException e) { e.printStackTrace();

}finally {

try {

if (serverSocket != null) { serverSocket.close();

}

} catch (IOException e) { e.printStackTrace();

}

}

}

public void setSocket(Socket socket) { this.socket = socket; setDaemon(true); setPriority(NORM_PRIORITY); start();

}

public void run() { try {

InputStream sin = socket.getInputStream(); DataOutputStream dos = new

DataOutputStream(socket.getOutputStream());

13