

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