Ответ сервера пустой по какой-то причине?

#java #networking #udp

#java #сеть #udp

Вопрос:

Есть домашнее задание по созданию клиентского кода для отправки строки, разделенной на 2 переменные, через UDP. Сервер получает и подтверждает, отправляя две разделенные переменные обратно на передний план.

По какой-то причине мой ответ пустой, когда я его запускаю, и не уверен, почему. кто-нибудь может помочь, пожалуйста?

Когда я пытаюсь сделать это с целыми числами в другом коде, это работает, но когда я пытаюсь выполнить строки, ничего не возвращается.

Клиентский код:

 import java.io.*;
import java.net.*;
import java.util.Scanner;
public class UDPClient
{
    public static void main (String[] args) throws Exception
    {
        DatagramSocket client = new DatagramSocket();
        InetAddress IPAd = InetAddress.getByName("localhost");
        byte [] sendData1 = new byte[1024];
        byte [] sendData2 = new byte[1024];
        byte [] receiveData = new byte [1024];
        String input = "";
        Scanner in = new Scanner (System.in);
        System.out.println("Enter word: ");
        input = in.nextLine();
        String [] splitWord = input.split("");
        int length = splitWord.length;
        int evenSplit = 0;
        int oddSplit = 0;
        String firstHalf = "";
        String secondHalf  = "";

        if (length%2==0)
        {
            evenSplit = length / 2;
            for (int i=0; i<evenSplit; i  )
                firstHalf  = splitWord[i];

            for (int i=evenSplit; i<length;i  )
                secondHalf  = splitWord[i];
            }
        else{
            oddSplit = (length 1)/2;
            for (int i=0; i<oddSplit;i  )
                firstHalf  = splitWord[i];
            for (int i=oddSplit; i<length;i  )
            secondHalf  = splitWord[i];
        }

        sendData1 = firstHalf.getBytes();
        sendData2 = secondHalf.getBytes();
        DatagramPacket sendPacket1 = new DatagramPacket (sendData1, 
sendData1.length, IPAd, 2000);
        DatagramPacket sendPacket2 = new DatagramPacket (sendData2, 
sendData2.length, IPAd, 2000);
        client.send(sendPacket1);
        client.send(sendPacket2);
        DatagramPacket receivePacket = new DatagramPacket (receiveData, 
receiveData.length);
        String serverReply = new String (receivePacket.getData());
        System.out.println ("From server: "    serverReply);
        client.close();
    }

}
  

Серверный код:

 import java.io.*;
import java.net.*;
public class UDPServer
{
    public static void main (String [] args) throws Exception
    {
        DatagramSocket server = new DatagramSocket (2000);
        byte [] receiveData1 = new byte[1024];
        byte [] receiveData2 = new byte[1024];
        byte [] sendData = new byte [1024];

        while (true)
        {
            DatagramPacket receivePacket1 = new DatagramPacket 
(receiveData1, receiveData1.length);
            server.receive(receivePacket1);
            DatagramPacket receivePacket2 = new DatagramPacket 
(receiveData2, receiveData2.length);
            server.receive(receivePacket2);
            String firstHalfWord = new String (receivePacket1.getData());
            String secondHalfWord = new String (receivePacket2.getData());
            InetAddress IPAd = receivePacket1.getAddress();
            int port = receivePacket1.getPort();
            String response = secondHalfWord   firstHalfWord;
            sendData = response.getBytes();
            DatagramPacket sendPacket = new DatagramPacket (sendData, 
sendData.length, IPAd, port);
            server.send(sendPacket);



        }


    }
}
  

Если я набираю hello, это означает, что нужно ответить с помощью lohel (hel lo задом наперед)
он просто возвращается с «From server:» без какого-либо строкового ответа.

Ответ №1:

Перед строкой String serverReply = new String(receivePacket.getData()); вам нужно сказать client.receive(receivePacket);