Только получать одинаковые пакеты udp

1

Я новичок в 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

прослушивание

  • 0
    Интересно, было бы легче кому-то помочь, если бы вы добавили образец вывода, созданного этими классами?
Теги:
for-loop
packets
datagram

1 ответ

0

Клиент продолжает отправлять тот же номер. Вы никогда не обновляете dpSend.

  • 0
    Спасибо за это решение. Я обновил пакет, но теперь я получаю этот вывод на сервере: число прослушиваний получено: число 6 теперь уменьшено до: 4 получено число прослушиваний: 4 число уменьшено до: 2 получено число прослушиваний: 6 количество теперь уменьшено до: 4 прослушивания число получено: 2 число теперь уменьшено до: 0 прослушивания и на клиенте, который я получаю: введите номер: 6 число получено: 4 число получено: 2 На клиенте я также хотел включить 0, поскольку это является частью цикла , но на сервере повторяет номер 6.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню