В моем клиентском классе есть следующий код:
private void onCalculateClick() {
try {
DatagramSocket socket = new DatagramSocket(12346);
DatagramPacket datagramPacket;
InetAddress local = InetAddress.getByName("localhost");
byte[] bytes;
bytes = aTf.getText().getBytes();
datagramPacket = new DatagramPacket(bytes, bytes.length, local, 12345);
socket.send(datagramPacket);
bytes = bTf.getText().getBytes();
datagramPacket = new DatagramPacket(bytes, bytes.length, local, 12345);
socket.send(datagramPacket);
bytes = cTf.getText().getBytes();
datagramPacket = new DatagramPacket(bytes, bytes.length, local, 12345);
socket.send(datagramPacket);
datagramPacket = new DatagramPacket(bytes, bytes.length);
socket.receive(datagramPacket);
resultTf.setText(new String(datagramPacket.getData()));
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
Как вы видите, здесь я передаю данные из JTextFields на сервер и жду ответа.По умолчанию данные равны 2 в ATF, 8 в bTf и 11 в CTF (возможно, это поможет).А вот код моего сервера:
public class UpdServer {
private double sum1 = 0;
private double sum2 = 0;
private byte[] bytes = new byte[100];
private DatagramSocket socket;
private DatagramPacket datagramPacket = new DatagramPacket(bytes, 100);
public static void main(String[] args) {
new UpdServer();
}
private UpdServer() {
try {
socket = new DatagramSocket(12345);
listen();
} catch (SocketException e) {
e.printStackTrace();
}
}
private void listen() {
int a, b, c;
try {
socket.receive(datagramPacket);
String str = new String(datagramPacket.getData());
System.out.println(str);
a = Integer.parseInt(str);
socket.receive(datagramPacket);
str = new String(datagramPacket.getData());
System.out.println(str);
b = Integer.parseInt(str);
socket.receive(datagramPacket);
str = new String(datagramPacket.getData());
System.out.println(str);
c = Integer.parseInt(str);
Thread firstSumThread = new Thread(() -> {
for (int i = a; i < b; i++) {
sum1 += (i - 1) * (i - 1);
}
});
Thread secondSumThread = new Thread(() -> {
for (int i = b; i < c; i++) {
sum2 += (double) 2 * i / (7 * i + 1);
}
});
firstSumThread.start();
secondSumThread.start();
firstSumThread.join();
secondSumThread.join();
sendBack();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
private void sendBack() {
String str = String.valueOf(sum1 - sum2);
byte[] send = str.getBytes();
try {
datagramPacket = new DatagramPacket(send, send.length, InetAddress.getByName("localhost"), 12346);
socket.send(datagramPacket);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Но когда я запускаю сервер, клиент, нажимаю на кнопку Рассчитать, я получаю следующую ошибку:
Exception in thread "main" java.lang.NumberFormatException: For input string: "2 "
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at com.mikhailovskii.lab2.udp.UpdServer.listen(UpdServer.java:37)
at com.mikhailovskii.lab2.udp.UpdServer.<init>(UpdServer.java:25)
at com.mikhailovskii.lab2.udp.UpdServer.main(UpdServer.java:19)
Итак, какЯ понимаю, это происходит после преобразования первого переданного String в int, но я не могу понять, почему.Итак, в чем дело и как я могу решить эту проблему?