0

i have the following task. I need to build a UDP Server / Client program. The server should handle more than one client request. Everything is ready and i just need to handle the multi client requests. I am also unsure about extending Thread. I know that its preferred to implement runnable.

EDIT

i separated know the server into 2 parts. The MainServer.java now creates a Thread. This Thread is the TemperatureServer.java. It waits for the request from the client. But now i create oodless threads. Is there a way to create a thread, only when i receive a request? Or is this the right way?

I know that multithread tests are terrible, but is there a good way to test it here? Don't need a coded test.

MainServer.java:

public class MainServer extends Thread{

private DatagramSocket socket;
private CSVReader csvReader;
private byte[] buf = new byte[256];

public MainServer() {
    csvReader = CSVReader.getInstance();
    try {
        this.socket = new DatagramSocket(4445);
    } catch (SocketException e) {
        e.printStackTrace();
    }
}

public void run() {
    while (true) {
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        new Thread(new TemperatureServer(socket, packet, csvReader)).start();
    }
}
}

TemperatureServer.java

public class TemperatureServer extends Thread{

private byte[] buf = new byte[256];
private DatagramSocket socket;
private DatagramPacket packet;
private boolean running;
private CSVReader csvReader;


public TemperatureServer(DatagramSocket socket, DatagramPacket packet, CSVReader csvReader) {
    this.socket = socket;
    this.packet = packet;
    this.csvReader = csvReader;
}

public void run() {
    running = true;

    while (running) {
        this.packet = new DatagramPacket(buf, buf.length);
        try {
            socket.receive(packet);
            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            packet = new DatagramPacket(buf, buf.length, address, port);
            String received = new String(packet.getData(), 0, packet.getLength());
            LocalDate localDate = null;
            try {
                localDate = LocalDate.parse(received.substring(0, 10));
            } catch (DateTimeParseException e) {
                e.printStackTrace();
            }

            TreeMap<LocalTime, Float> tempValuesFromDate = csvReader.getTempValuesFromDate(localDate);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream ous = new ObjectOutputStream(baos);
            ous.writeObject(tempValuesFromDate);
            byte[] sendingData = baos.toByteArray();
            baos.close();

            packet = new DatagramPacket(sendingData, sendingData.length, address, port);
            socket.send(packet);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    socket.close();
}
}
behzad k.
  • 49
  • 7
  • 1
    [Yes, you should.](https://stackoverflow.com/q/541487/836214) – Krease Dec 18 '18 at 04:35
  • It looks like you've made some significant edits here - but I'm still not clear what you're asking. Can you please clarify what you're hoping to have answered? – Krease Dec 18 '18 at 22:06

0 Answers0