⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multicastserver.java

📁 精通Java核心技术源代码
💻 JAVA
字号:
// ==================== Program Discription ===================== 
// 程序名称:示例12-12: MulticastServer.java
// 程序目的:创建一个组播服务器。
//==========================================================
import java.io.*;
import java.net.*;
import java.util.*;

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);

        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;
    }
}

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("136.122.133.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();
    }
 }

 public class MulticastServer {
    public static void main(String[] args) throws java.io.IOException {
        new MulticastServerThread().start();
    }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -