📄 multicastdiscovery.java
字号:
// MulticastDiscovery.java// MulticastDiscovery is an application that demonstrates Jini// lookup service discovery using multicast.package com.deitel.advjhtp1.jini.discovery;// Java core packagesimport java.rmi.*;import java.io.*;import java.awt.*;import java.awt.event.*;// Java extension packagesimport javax.swing.*;// Jini core packagesimport net.jini.core.lookup.ServiceRegistrar;// Jini extension packagesimport net.jini.discovery.*;public class MulticastDiscovery extends JFrame implements DiscoveryListener { // number of lookup services discovered through multicast private int servicesFound = 0; private JTextArea outputArea = new JTextArea( 10, 20 ); // MulticastDiscovery constructor public MulticastDiscovery () { super( "MulticastDiscovery" ); // discover lookup services in public group using multicast try { LookupDiscovery lookupDiscovery = new LookupDiscovery( new String[] { "" } ); outputArea.append( "Finding lookup services for " + "public group ...\n" ); // listen for DiscoveryEvents lookupDiscovery.addDiscoveryListener ( this ); } // handle exception discovering lookup services catch ( IOException exception ) { exception.printStackTrace(); } getContentPane().add( new JScrollPane( outputArea ), BorderLayout.CENTER ); } // receive notification of found lookup services public void discovered ( DiscoveryEvent event ) { // get the ServiceRegistrars for found lookup services ServiceRegistrar[] registrars = event.getRegistrars(); int order = 0; // get the information for each lookup service found for ( int i = 0; i < registrars.length ; i++ ) { ServiceRegistrar registrar = registrars[ i ]; if ( registrar != null ) { // append information about discovered services // to outputArea try { order = servicesFound + i + 1; // get the hostname and port number Runnable appender = new TextAppender( "Lookup Service " + order + ":\n" + " Host: " + registrar.getLocator().getHost() + "\n" + "\n Port: " + registrar.getLocator().getPort() + "\n" + " Group support: " ); // append to outputArea on event-dispatch thread SwingUtilities.invokeLater( appender ); // get the group(s) the lookup service served String[] groups = registrar.getGroups(); StringBuffer names = new StringBuffer(); // get the group names, if empty write public for ( int j = 0; j < groups.length ; j++ ) { if ( groups[ j ].equals( "" ) ) names.append( "public\t" ); else names.append( groups[ j ] + "\t" ); } // append group names to outputArea SwingUtilities.invokeLater( new TextAppender( names + "\n" ) ); } // handle exception communicating with ServiceRegistrar catch ( RemoteException exception ) { exception.printStackTrace(); } } } // update number of services found servicesFound = order; } // end method discovered // receive notification of discarded lookup services that // are no longer valid public void discarded( DiscoveryEvent event ) { ServiceRegistrar[] discardedRegistrars = event.getRegistrars(); SwingUtilities.invokeLater( new TextAppender( "Number of discarded registrars: " + discardedRegistrars.length + "\n" ) ); } // TextAppender is a Runnable class for appending // text to outputArea on the event-dispatching thread. private class TextAppender implements Runnable { private String textToAppend; // text to append to outputArea // TextAppender constructor public TextAppender( String text ) { textToAppend = text; } // append text to outputArea and scroll to bottom public void run() { outputArea.append( textToAppend ); outputArea.setCaretPosition( outputArea.getText().length() ); } } // end inner class TextAppender // launch MulticastDiscovery application public static void main( String args[] ) { // set SecurityManager if ( System.getSecurityManager() == null ) System.setSecurityManager( new RMISecurityManager() ); MulticastDiscovery discovery = new MulticastDiscovery(); discovery.setDefaultCloseOperation( EXIT_ON_CLOSE ); discovery.pack(); discovery.setVisible( true ); }}/*************************************************************** * (C) Copyright 2002 by Deitel & Associates, Inc. and * * Prentice Hall. All Rights Reserved. * * * * DISCLAIMER: The authors and publisher of this book have * * used their best efforts in preparing the book. These * * efforts include the development, research, and testing of * * the theories and programs to determine their effectiveness. * * The authors and publisher make no warranty of any kind, * * expressed or implied, with regard to these programs or to * * the documentation contained in these books. The authors * * and publisher shall not be liable in any event for * * incidental or consequential damages in connection with, or * * arising out of, the furnishing, performance, or use of * * these programs. * ***************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -