Материал: Java. Лабораторная работа 9

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Результат компиляции и запуска приведен на рис. 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

try {

IVector firstVector = Vectors.inputVector(sin); IVector secondVector = Vectors.inputVector(sin);

for (int i = 0, len = firstVector.size(); i < len; ++i) { System.out.print(firstVector.get(i) + " ");

}

System.out.print("*");

for (int i = 0, len = secondVector.size(); i < len; ++i) { System.out.print(" " + secondVector.get(i));

}

IVector resultVector = Vectors.sum(firstVector,

secondVector);

System.out.print(" =");

for (int i = 0, len = resultVector.size(); i < len; ++i) { System.out.print(" " + resultVector.get(i));

}

System.out.println(); dos.writeUTF("OK"); Vectors.outputVector(resultVector, dos); dos.flush();

} catch (Exception e) { dos.writeUTF("ERROR"); dos.flush();

}

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

}

}

}

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

Рисунок 4 — Компиляция и запуск Server.java и Client.java Заключение

В результате выполнения лабораторной работы мы ознакомились с возможностями механизма рефлексии и нововведениями Java 1.5.

14