Я новичок в java, и я создал две программы, использующие UDP-пакеты (Client and Server). Клиент получает целое число от пользователя и отправляет его на сервер. Затем сервер вычитает 2 из целого числа и отправляет его обратно клиенту. Сообщения отправляются туда и обратно, пока Клиент не получит неподтвержденный номер от Сервера. Проблема в том, что я получаю тот же номер. Кто-нибудь знает, как это решить? Нужно ли мне несколько циклов?
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.util.Scanner;
public class Client {
public static void main (String[] args) throws IOException{
DatagramSocket ds = new DatagramSocket();
System.out.println("Insert number: ");
Scanner s = new Scanner(System.in);
int num = s.nextInt();
int port = 1999;
byte[] byteSend = ByteBuffer.allocate(4).putInt(num).array();
InetAddress address = InetAddress.getByName("localhost");
byte[] byteReceive = new byte[4];
DatagramPacket dpReceive = new DatagramPacket(byteReceive, byteReceive.length);
DatagramPacket dpSend = new DatagramPacket(byteSend, byteSend.length, address, port);
if(num <=0){
ds.close();
}else{
for(int i = 0; i<=num; i+= 2){
ds.send(dpSend);
ds.receive(dpReceive);
num = ByteBuffer.wrap(byteReceive).getInt();
System.out.println("number received: " + num);
}
}
ds.close();
}
}
Класс сервера
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;public class Server {
public static void main(String[] args) throws Exception {
DatagramSocket dg = new DatagramSocket(1999);
while(true) {
System.out.println("Listening");
byte[] byteReceive = new byte[4];
DatagramPacket dp = new DatagramPacket(byteReceive, byteReceive.length);
dg.receive(dp);
int num = ByteBuffer.wrap(dp.getData()).getInt();
InetAddress address = dp.getAddress();
int port = dp.getPort();
int numResult = num - 2;
byte[] byteSend = ByteBuffer.allocate(4).putInt(numResult).array();
DatagramPacket dpSend = new DatagramPacket(byteSend, byteSend.length, address, port);
System.out.println("number received: " + num);
System.out.println("number now decreased to: " + numResult);
dg.send(dpSend);
}
}
}
Вывод клиента возникает следующим образом, когда вводится 6:
Вставить номер:
6 полученных чисел: 4
полученное число: 4
полученное число: 4
Вывод сервера появляется следующим образом:
прослушивание
полученное число: 6
число теперь уменьшено до: 4
прослушивание
Клиент продолжает отправлять тот же номер. Вы никогда не обновляете dpSend
.