集册 Java实例教程 创建DatagramSocket服务器

创建DatagramSocket服务器

欢马劈雪     最近更新时间:2020-01-02 10:19:05

490
创建DatagramSocket服务器
// from N o w J a v a . c o m - 时代Java

import java.io.*;

import java.net.*;

import java.util.*;

class MulticastServer {

    public static void main(String[] args) throws java.io.IOException {

        new MulticastServerThread().start();

    }

}

class QuoteServerThread extends Thread {


    protected DatagramSocket socket = null;

    protected BufferedReader in = null;

    protected boolean moreQuotes = true;


    public QuoteServerThread() throws IOException {

        this("QuoteServerThread");

    }


    public QuoteServerThread(String name) throws IOException {

        super(name);

        socket = new DatagramSocket(4445);/* from N o w J a v a . c o m - 时  代  Java*/


        try {

            in = new BufferedReader(new FileReader("one-liners.txt"));

        } catch (FileNotFoundException e) {

            System.err

                    .println("Could not open quote file. Serving time instead.");

        }

    }


    public void run() {


        while (moreQuotes) {

            try {

                byte[] buf = new byte[256];


                // receive request

                DatagramPacket packet = new DatagramPacket(buf, buf.length);

                socket.receive(packet);


                // figure out response

                String dString = null;

                if (in == null)

                    dString = new Date().toString();

                else

                    dString = getNextQuote();


                buf = dString.getBytes();


                // send the response to the client at "address" and "port"

                InetAddress address = packet.getAddress();

                int port = packet.getPort();

                packet = new DatagramPacket(buf, buf.length, address, port);

                socket.send(packet);

            } catch (IOException e) {

                e.printStackTrace();

                moreQuotes = false;

            }

        }

        socket.close();

    }


    protected String getNextQuote() {

        String returnValue = null;

        try {

            if ((returnValue = in.readLine()) == null) {

                in.close();

                moreQuotes = false;

                returnValue = "No more quotes. Goodbye.";

            }

        } catch (IOException e) {

            returnValue = "IOException occurred in server.";

        }

        return returnValue;

    }

}


public class MulticastServerThread extends QuoteServerThread {


    private long FIVE_SECONDS = 5000;


    public MulticastServerThread() throws IOException {

        super("MulticastServerThread");

    }


    public void run() {

        while (moreQuotes) {

            try {

                byte[] buf = new byte[256];


                // construct quote

                String dString = null;

                if (in == null)

                    dString = new Date().toString();

                else

                    dString = getNextQuote();

                buf = dString.getBytes();


                // send it

                InetAddress group = InetAddress.getByName("230.0.0.1");

                DatagramPacket packet = new DatagramPacket(buf, buf.length,

                        group, 4446);

                socket.send(packet);


                // sleep for a while

                try {

                    sleep((long) (Math.random() * FIVE_SECONDS));

                } catch (InterruptedException e) {

                }

            } catch (IOException e) {

                e.printStackTrace();

                moreQuotes = false;

            }

        }

        socket.close();

    }

}


展开阅读全文