How can I implement a threaded UDP based server in Java?

后端 未结 4 1672
无人共我
无人共我 2020-12-13 15:54

How can I implement a threaded UDP based server in Java ?

Basically what I want, is to connect multiple clients to the server, and let each client have his own threa

4条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-13 16:33

    The design for this to a certain extent depends on whether each complete UDP "dialog" just requires a single request and immediate response, whether it's a single request or response with retransmissions, or whether there'll be a need to process lots of packets for each client.

    The RADIUS server I wrote had the single request + retransmit model and spawned a thread for each incoming packet.

    As each DatagramPacket was received it was passed to a new thread, and then that thread was responsible for sending back the response. This was because the computation and database accesses involved in generating each response could take a relatively long time and it's easier to spawn a thread than to have some other mechanism to handle new packets that arrive whilst old packets are still being processed.

    public class Server implements Runnable {
        public void run() {
            while (true) {
                DatagramPacket packet = socket.receive();
                new Thread(new Responder(socket, packet)).start();
            }
        }
    }
    
    public class Responder implements Runnable {
    
        Socket socket = null;
        DatagramPacket packet = null;
    
        public Responder(Socket socket, DatagramPacket packet) {
            this.socket = socket;
            this.packet = packet;
        }
    
        public void run() {
            byte[] data = makeResponse(); // code not shown
            DatagramPacket response = new DatagramPacket(data, data.length,
                packet.getAddress(), packet.getPort());
            socket.send(response);
        }
    }
    

提交回复
热议问题