rmiclientpeer.java

来自「p2p 源代码」· Java 代码 · 共 112 行

JAVA
112
字号
import java.util.*;import java.io.*;import net.jxta.peergroup.PeerGroup;import net.jxta.peergroup.PeerGroupFactory;import net.jxta.exception.PeerGroupException;import net.jxta.document.Advertisement;import net.jxta.document.StructuredTextDocument;import net.jxta.document.MimeMediaType;import net.jxta.document.TextElement;import net.jxta.discovery.DiscoveryService;import net.jxta.protocol.ModuleSpecAdvertisement;import jxta.security.util.URLBase64;public class RMIClientPeer {    static Enumeration peers;    static PeerGroup netpg;    static int timeout = 10000;    static int count = 3;    public static void main(String[] args) throws Exception {        try {            netpg = PeerGroupFactory.newNetPeerGroup();        } catch (PeerGroupException pge) {            // Couldn't initialize; can't continue            System.out.println("Fatal error : creating the NetPeerGroup");            System.exit(-1);        }        if (!discoverRMIPeers()) {            System.out.println("Can't find RMI peers");            System.exit(-1);        }        callPeers();        System.exit(0);    }    private static boolean discoverRMIPeers() {        DiscoveryService disco = netpg.getDiscoveryService();        disco.getRemoteAdvertisements(null,                        DiscoveryService.ADV,                        "Name", "JXTASPEC:RMIService:HelloService", 5, null);        try {            Thread.sleep(timeout);        } catch (InterruptedException ie) {}        System.out.println("Looking for RMI Service peers...");        while (count-- > 0) {            try {                peers = disco.getLocalAdvertisements(DiscoveryService.ADV,                        "Name", "JXTASPEC:RMIService:HelloService");                if (peers != null && peers.hasMoreElements())                    break;                disco.getRemoteAdvertisements(null,                               DiscoveryService.ADV,                               "Name", "JXTASPEC:RMIService:HelloService", 5,				null);                try {                    Thread.sleep(timeout);                } catch (InterruptedException ie) {}            } catch (Exception e) {                // Try again            }        }        if (peers == null || !peers.hasMoreElements())            return false;        return true;    }    private static void callPeers() {        while (peers.hasMoreElements()) {            try {                Object o = peers.nextElement();                ModuleSpecAdvertisement msa = (ModuleSpecAdvertisement) o;                StructuredTextDocument doc = (StructuredTextDocument)                    msa.getParam();                if (doc == null) {                    // No params                    System.out.println("RMIService adv. has no params; ignoring");                    continue;                }                Enumeration elements = doc.getChildren();                String stub = null;                while (elements.hasMoreElements()) {                    TextElement te = (TextElement) elements.nextElement();                    String elementName = te.getName();                    if (elementName.equals("Stub")) {                        stub = te.getTextValue();                        break;                    }                }                if (stub == null) {                    System.out.println("Didn't find a stub parameter; ignoring");                    continue;                }                byte[] enc = stub.getBytes();                ByteArrayInputStream bais =                    new ByteArrayInputStream(URLBase64.decode(enc,                                                              0, enc.length));                ObjectInputStream ois = new ObjectInputStream(bais);                RMIService rs = (RMIService) ois.readObject();                System.out.println("Remote service says " + rs.sayHello());            } catch (Exception e) {                System.out.println("Couldn't talk to peer -- " + e);                e.printStackTrace();            }        }    }}

⌨️ 快捷键说明

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