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

📄 serviceserver.java

📁 jxta的例子
💻 JAVA
字号:
/* * Copyright (c) 2001-2007 Sun Microsystems, Inc.  All rights reserved. *   *  The Sun Project JXTA(TM) Software License *   *  Redistribution and use in source and binary forms, with or without  *  modification, are permitted provided that the following conditions are met: *   *  1. Redistributions of source code must retain the above copyright notice, *     this list of conditions and the following disclaimer. *   *  2. Redistributions in binary form must reproduce the above copyright notice,  *     this list of conditions and the following disclaimer in the documentation  *     and/or other materials provided with the distribution. *   *  3. The end-user documentation included with the redistribution, if any, must  *     include the following acknowledgment: "This product includes software  *     developed by Sun Microsystems, Inc. for JXTA(TM) technology."  *     Alternately, this acknowledgment may appear in the software itself, if  *     and wherever such third-party acknowledgments normally appear. *   *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must  *     not be used to endorse or promote products derived from this software  *     without prior written permission. For written permission, please contact  *     Project JXTA at http://www.jxta.org. *   *  5. Products derived from this software may not be called "JXTA", nor may  *     "JXTA" appear in their name, without prior written permission of Sun. *   *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUN  *  MICROSYSTEMS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  *  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *   *  JXTA is a registered trademark of Sun Microsystems, Inc. in the United  *  States and other countries. *   *  Please see the license information page at : *  <http://www.jxta.org/project/www/license.html> for instructions on use of  *  the license in source files. *   *  ==================================================================== *   *  This software consists of voluntary contributions made by many individuals  *  on behalf of Project JXTA. For more information on Project JXTA, please see  *  http://www.jxta.org. *   *  This license is based on the BSD license adopted by the Apache Foundation.  */package tutorial.service;import net.jxta.discovery.DiscoveryService;import net.jxta.document.AdvertisementFactory;import net.jxta.document.MimeMediaType;import net.jxta.document.StructuredTextDocument;import net.jxta.endpoint.Message;import net.jxta.endpoint.MessageElement;import net.jxta.id.IDFactory;import net.jxta.peergroup.PeerGroup;import net.jxta.pipe.InputPipe;import net.jxta.pipe.PipeID;import net.jxta.pipe.PipeService;import net.jxta.platform.ModuleClassID;import net.jxta.platform.NetworkManager;import net.jxta.protocol.ModuleClassAdvertisement;import net.jxta.protocol.ModuleSpecAdvertisement;import net.jxta.protocol.PeerGroupAdvertisement;import net.jxta.protocol.PipeAdvertisement;import java.io.File;import java.io.StringWriter;import java.net.URI;import java.net.URISyntaxException;/** * ServiceServer side: This is the server side of the JXTA-EX1 example. The * server side application advertises the JXTA-EX1 service, starts the * service, and receives messages on a service defined pipe * endpoint. The service associated module spec and class * advertisement are published in the NetPeerGroup. Clients can * discover the module advertisements and create output pipeService to * connect to the service. The server application creates an input * pipe that waits to receive messages. Each message received is * printed to the screen. We run the server as a daemon in an infinite * loop, waiting to receive client messages. */public class ServiceServer {    static PeerGroup netPeerGroup = null;    static PeerGroupAdvertisement groupAdvertisement = null;    private DiscoveryService discovery;    private PipeService pipeService;    private InputPipe serviceInputPipe;    private NetworkManager manager;    /**     * A pre-baked PipeID string     */    public final static String PIPEIDSTR = "urn:jxta:uuid-9CCCDF5AD8154D3D87A391210404E59BE4B888209A2241A4A162A10916074A9504";    public static void main(String args[]) {        ServiceServer myapp = new ServiceServer();        System.out.println("Starting Service Peer ....");        myapp.startJxta();        System.out.println("Good Bye ....");        System.exit(0);    }    private void startJxta() {        try {            manager = new NetworkManager(NetworkManager.ConfigMode.ADHOC, "ServiceServer",                    new File(new File(".cache"), "ServiceServer").toURI());            manager.startNetwork();        } catch (Exception e) {            e.printStackTrace();            System.exit(-1);        }        netPeerGroup = manager.getNetPeerGroup();        // this is how to obtain the netPeerGroup advertisement        groupAdvertisement = netPeerGroup.getPeerGroupAdvertisement();        // get the discovery, and pipe service        System.out.println("Getting DiscoveryService");        discovery = netPeerGroup.getDiscoveryService();        System.out.println("Getting PipeService");        pipeService = netPeerGroup.getPipeService();        startServer();    }    /**     * Creates the pipe advertisement     * pipe ID     *     * @return the pre-defined Pipe Advertisement     */    public static PipeAdvertisement createPipeAdvertisement() {        PipeID pipeID = null;        try {            pipeID = (PipeID) IDFactory.fromURI(new URI(PIPEIDSTR));        } catch (URISyntaxException use) {            use.printStackTrace();        }        PipeAdvertisement advertisement = (PipeAdvertisement)                AdvertisementFactory.newAdvertisement(PipeAdvertisement.getAdvertisementType());        advertisement.setPipeID(pipeID);        advertisement.setType(PipeService.UnicastType);        advertisement.setName("Pipe tutorial");        return advertisement;    }    private void startServer() {        System.out.println("Start the ServiceServer daemon");        try {            // First create the Module class advertisement associated with the service            // We build the module class advertisement using the advertisement            // Factory class by passing it the type of the advertisement we            // want to construct. The Module class advertisement is to be used            // to simply advertise the existence of the service. This is a            // a very small advertisement that only advertise the existence            // of service. In order to access the service, a peer will            // have to discover the associated module spec advertisement.            ModuleClassAdvertisement mcadv = (ModuleClassAdvertisement)                    AdvertisementFactory.newAdvertisement(ModuleClassAdvertisement.getAdvertisementType());            mcadv.setName("JXTAMOD:JXTA-EX1");            mcadv.setDescription("Tutorial example to use JXTA module advertisement Framework");            ModuleClassID mcID = IDFactory.newModuleClassID();            mcadv.setModuleClassID(mcID);            // Ok the Module Class advertisement was created, just publish            // it in my local cache and to my peergroup. This            // is the NetPeerGroup            discovery.publish(mcadv);            discovery.remotePublish(mcadv);            // Create the Module Spec advertisement associated with the service            // We build the module Spec Advertisement using the advertisement            // Factory class by passing in the type of the advertisement we            // want to construct. The Module Spec advertisement will contain            // all the information necessary for a client to contact the service            // for instance it will contain a pipe advertisement to            // be used to contact the service            ModuleSpecAdvertisement mdadv = (ModuleSpecAdvertisement)                    AdvertisementFactory.newAdvertisement(ModuleSpecAdvertisement.getAdvertisementType());            // Setup some of the information field about the servive. In this            // example, we just set the name, provider and version and a pipe            // advertisement. The module creates an input pipeService to listen            // on this pipe endpoint.            //            mdadv.setName("JXTASPEC:JXTA-EX1");            mdadv.setVersion("Version 1.0");            mdadv.setCreator("sun.com");            mdadv.setModuleSpecID(IDFactory.newModuleSpecID(mcID));            mdadv.setSpecURI("http://www.jxta.org/Ex1");            // Create a pipe advertisement for the Service. The client MUST use            // the same pipe advertisement to talk to the server. When the client            // discovers the module advertisement it will extract the pipe            // advertisement to create its pipe. So, we are reading the pipe            // advertisement from a default config file to ensure that the            // service will always advertise the same pipe            PipeAdvertisement pipeadv = createPipeAdvertisement();            // Store the pipe advertisement in the spec adv.            // This information will be retrieved by the client when it will            // connect to the service            mdadv.setPipeAdvertisement(pipeadv);            // display the advertisement as a plain text document.            StructuredTextDocument doc = (StructuredTextDocument) mdadv.getDocument(MimeMediaType.XMLUTF8);            StringWriter out = new StringWriter();            doc.sendToWriter(out);            System.out.println(out.toString());            out.close();            // Ok the Module advertisement was created, just publish            // it in my local cache and into the NetPeerGroup.            discovery.publish(mdadv);            discovery.remotePublish(mdadv);            // we are now ready to start the service create the input pipe endpoint clients will            // use to connect to the service            serviceInputPipe = pipeService.createInputPipe(pipeadv);        } catch (Exception ex) {            ex.printStackTrace();            System.out.println("ServiceServer: Error publishing the module");        }        // Ok no way to stop this daemon, but that's beyond the point of the example!        while (true) {            // loop over every input received from clients            System.out.println("Waiting for client messages to arrive");            Message msg;            try {                // Listen on the pipe for a client message                msg = serviceInputPipe.waitForMessage();            } catch (Exception e) {                serviceInputPipe.close();                System.out.println("ServiceServer: Error listening for message");                return;            }            // Read the message as a String            String ip = null;            try {                // NOTE: The ServiceClient and Service have to agree on the tag names.                // this is part of the Service protocol defined  to access the service.                // get all the message elements                Message.ElementIterator en = msg.getMessageElements();                if (!en.hasNext()) {                    return;                }                // get the message element named SenderMessage                MessageElement msgElement = msg.getMessageElement(null, "DataTag");                // Get message                if (msgElement.toString() != null) {                    ip = msgElement.toString();                }                if (ip != null) {                    // read the data                    System.out.println("ServiceServer: receive message: " + ip);                } else {                    System.out.println("ServiceServer: error could not find the tag");                }            } catch (Exception e) {                System.out.println("ServiceServer: error receiving message");            }        }    }}

⌨️ 快捷键说明

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