Ответ сервера пуст по какой-то причине? - PullRequest
0 голосов
/ 10 апреля 2019

Есть домашнее задание для создания клиентского кода для отправки строки, разделенной на 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);



        }


    }
}

Если я напишу привет, это значит ответить с lohel (hel + lo обратно вперед) просто возвращается «С сервера:» без строкового ответа.

1 Ответ

2 голосов
/ 10 апреля 2019

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

...