集册 Java实例教程 创建DatagramSocket服务器以提供文本文件

创建DatagramSocket服务器以提供文本文件

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

514
创建DatagramSocket服务器以提供文本文件

import java.io.*;

import java.net.*;

import java.util.*;//来 自 n  o  w  j  a  v  a . c o m


public class QuoteServer {

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

        new QuoteServerThread().start();

    }

}


class QuoteServerThread extends Thread {


    protected DatagramSocket socket = null;

    protected BufferedReader in = null;

    protected boolean moreQuotes = true;


    public QuoteServerThread() throws IOException {

        this("QuoteServerThread");

    }
    /* 
     来自 
    *时代Java*/


    public QuoteServerThread(String name) throws IOException {

        super(name);

        socket = new DatagramSocket(4445);


        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;

    }

}


展开阅读全文