Использование DatagramPacket в UDP - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь использовать DatagramPacket в Java для связи с сервером и клиентом. Моя цель: когда клиент говорит: Привет, а Сервер говорит: Привет, Приятно познакомиться. Поэтому я использую условие if для достижения этой цели. Тем не менее, когда ввод "Hello", кажется, что это sikp условие if (я уже использовал отладку). Интересно, почему это произошло? Это кажется слишком странным. Может ли кто-нибудь помочь мне с этим проблом? Любая помощь будет оценена! Спасибо! Код: Клиент:

public static void main(String[] args) {
        System.out.println("This is Server");
        DatagramSocket server = null;
        byte[] container = new byte[1024];
        try {
            server = new DatagramSocket(9998);
        } catch (SocketException e) {
            e.printStackTrace();
        }
        DatagramPacket dPacket = new DatagramPacket(container, container.length);   
        try {
            while(true) {               
                server.receive(dPacket);
                byte[] datas = dPacket.getData();
                String temp = new String(datas);
                if (temp.equals("Hello")) {
                    System.out.println("Hi~!Nice to meet you!");
                }else if (temp.equals("How are you?")) {
                    System.out.println("I am good!");
                }else {
                    System.out.println("Have a good day");
                }
                if (temp.equals("exit")) {
                    break;
                }


            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        server.close();
    }

Клиент:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("This is Client");
        try {
            DatagramSocket client = new DatagramSocket(8888);
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input = "";
            while(!input.equals("exit")) {
                input = br.readLine();
                byte[] msg = input.getBytes();
                DatagramPacket dPacket = new DatagramPacket(msg, msg.length,new InetSocketAddress("localhost",9998));
                client.send(dPacket);
            }


            client.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

1 Ответ

0 голосов
/ 16 марта 2020

Попробуйте следующее при получении данных.

byte[] datas = dPacket.getData();
String temp = new String(datas, 0, dPacket.getLength());
...