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

📄 groupdemo.java

📁 利用sun公司的Jxta框架设计的P2P程序
💻 JAVA
字号:
import java.io.StringWriter;

import net.jxta.credential.AuthenticationCredential;
import net.jxta.credential.Credential;
import net.jxta.discovery.DiscoveryService;
import net.jxta.document.MimeMediaType;
import net.jxta.document.StructuredDocument;
import net.jxta.document.StructuredTextDocument;
import net.jxta.exception.PeerGroupException;
import net.jxta.membership.Authenticator;
import net.jxta.membership.MembershipService;
import net.jxta.peergroup.NetPeerGroupFactory;
import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupID;
import net.jxta.protocol.ModuleImplAdvertisement;
import net.jxta.protocol.PeerGroupAdvertisement;


public class GroupDemo {
	static PeerGroup myGroup = null;
	private DiscoveryService discoSvc;
	
	public static void main(String[] args){
		System.out.println("Starting GroupDemo...");
		GroupDemo myapp = new GroupDemo();
		myapp.startJxta();
		PeerGroup newGroup = myapp.createGroup();
		if(newGroup!=null){
			myapp.joinGroup(newGroup);
		}
		System.out.println("good bye...");
		System.exit(0);
	}

	private void startJxta() {
		try{
			//初始化默认点组
			myGroup = new NetPeerGroupFactory().getInterface();
		} catch( PeerGroupException e){
			//如果不能初始化,打印错误信息并退出
			System.out.println("fatal error: group creation failure");
			e.printStackTrace();
			System.exit(1);
		}
		//获取默认点组的发现服务
		discoSvc = myGroup.getDiscoveryService();
	}
	
	private PeerGroup createGroup() {
		PeerGroup pg;
		PeerGroupAdvertisement adv;
		
		System.out.println("Creating a new group advertisement");
		
		try{
			//创建一个包含有点组所有核心服务飞模块实现通告
			ModuleImplAdvertisement implAdv = 
				myGroup.getAllPurposePeerGroupImplAdvertisement();
			//创建一个新的点组
			pg = myGroup.newGroup(
					null,  //创建新的点组ID
					implAdv, //模块实现通告
					"GroupTest",  //点组名称
					"testing group adv");  //通告描述
			//打印点组的名称和ID
			adv = pg.getPeerGroupAdvertisement();
			PeerGroupID GID = adv.getPeerGroupID();
			System.out.println(" Group= "+adv.getName()+"\n Group ID= " +
					GID.toString());
		} catch (Exception e){
			System.out.println("Group creation failed whth " + e.toString());
			return null;
		}
		
		try{
			//发布点组通告
			discoSvc.remotePublish(adv);
			System.out.println("Group published successfully.\n");
		} catch(Exception e){
			System.out.println("Error publishing group advertisement");
			e.printStackTrace();
			return null;
		}
		return pg;
	}

	private void joinGroup(PeerGroup grp) {
		System.out.println("Joining peer group...");
		StructuredDocument creds = null;
		
		try{
			//生成点组的信任书
			AuthenticationCredential authCred = new AuthenticationCredential(grp,null,creds);
			//获取点组成员的关系服务
			MembershipService membership = grp.getMembershipService();
			//申请加入
			Authenticator auth = membership.apply(authCred);
			//查看申请是否通过
			if(auth.isReadyForJoin()){
				Credential myCred = membership.join(auth);
				System.out.println("Successfully joined group "+grp.getPeerGroupName());
				//打印信任书
				System.out.println("\nCredential: ");
				StructuredTextDocument doc = 
					(StructuredTextDocument)myCred.getDocument(new MimeMediaType("text/plain"));
				StringWriter out = new StringWriter();
				doc.sendToWriter(out);
				System.out.println(out.toString());
				out.close();
			} else
				System.out.println("Failure: unable to join group");
		} catch(Exception e){
			System.out.println("Failure in authentication");
			e.printStackTrace();
		}
		
	}
}

⌨️ 快捷键说明

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