Мне было поручено создать сервер, который эмулирует калькулятор и который при обнаружении операции, отличной от '+', '-', '*' & '/', генерирует исключение для клиента.но я не могу понять, как отправить Исключение, сгенерированное на Сервере, Клиенту.
Изначально я наивно думал, что могу легко сделать это с помощью dout.writeUTF (e.getMessage ()) вблок catch.
package networking;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
class OperationDeniedException extends Exception {
private String op;
public OperationDeniedException(String op) {
this.op = op;
// TODO Auto-generated constructor stub
}
public String toString() {
return "OperationDeniedException: Operation " + op + " is Denied by server";
}
}
public class CalcServer {
public static void main(String[] args) {
String opr, op1, op2;
double Dop1, Dop2;
boolean divbyzero = false;
DataInputStream din;
DataOutputStream dout;
PrintWriter p;
try {
ServerSocket ss = new ServerSocket(4444);
Socket s = ss.accept();
din = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
p = new PrintWriter(s.getOutputStream());
dout.writeUTF(opmsg);
opr = din.readUTF();
System.out.println(opr);
try {
System.out.println("Inside try for custom exception");
if (opr.charAt(0) != '+' && opr.charAt(0) != '-' && opr.charAt(0) != '*' && opr.charAt(0) != '/') {
throw new OperationDeniedException(opr);
}
} catch (OperationDeniedException e) {
String msge = e.getMessage();
System.out.println("just before write");
dout.writeUTF((String) e.toString());
System.out.println("exception sent");
System.exit(0);
}
dout.writeUTF("Send the first Operand");
op1 = din.readUTF();
Dop1 = Double.parseDouble(op1);
dout.writeUTF("Send the Second Operand");
op2 = din.readUTF();
Dop2 = Double.parseDouble(op2);
switch (opr) {
case "+":
Dop1 += Dop2;
break;
case "-":
Dop1 -= Dop2;
break;
case "*":
Dop1 *= Dop2;
break;
case "/":
if (Dop2 == 0.0) {
divbyzero = true;
break;
}
Dop1 /= Dop2;
break;
default:
break;
}
if (divbyzero) {
dout.writeUTF("Second operand is 0 and can't divide bt zero");
}
dout.writeUTF("Ans of the operation is= " + Double.toString(Dop1));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static final String opmsg = "Select one of the following operations +, -, *, /.";
}