P2P实验报告解读.docx
- 文档编号:24192490
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:21
- 大小:331.84KB
P2P实验报告解读.docx
《P2P实验报告解读.docx》由会员分享,可在线阅读,更多相关《P2P实验报告解读.docx(21页珍藏版)》请在冰豆网上搜索。
P2P实验报告解读
JIANGSUUNIVERSITY
《P2P软件开发技术实验报告》
对P2P软件的基本应用开发
学院名称:
计算机科学与通信工程学院
专业班级:
软件1201
学生姓名:
倪赛杰
学生学号:
3120608025
指导老师:
李致远
2015年5月
目录
一、Skype插件开发平台搭建-1-
二、Skype基本应用开发-5-
三、Skype基本业务功能实现-11-
四、Skype应用实例-17-
一、Skype插件开发平台搭建
一.实验内容
完成对平台eclipse的搭建以及对Skype环境和基本源代码的熟悉。
二.实验目的
1、了解eclipse的安装;
2、熟悉Skype环境搭建;
3、熟悉Skype的客户端安装注册;
4、理解代码,成功实现应用程序的测试。
三.实验环境
1、PC机;
2、Skype4Java开发工具包;
3、Skype的客户端;
4、Eclipse平台。
注意:
之后的所有内容都在形同的环降下进行操作(之后略去)。
四.实验步骤
<1>eclipse安装及使用测试
1)配置eclipse
1.首先到网站下载最新的JDK,并且安装。
(注意安装路径,因为在之后我们要用到这个路径。
)
2.点击桌面的“计算机”,选择“属性”命令。
在打开的“系统”对话点击“高级系统设置”。
然后在弹出的对话框选择“高级”选项卡,单击“环境变量”的选项。
3.在弹出的对话框中,单击“新建”按钮,分别输入变量名称“JAVA_HOME”和变量值(JDK的安装路径);确定后再次“新建”添加变量“CLASSPATH”和变量值“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”;确定之后再次“新建”变量“PATH”,变量值“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”最后确定完成。
2)测试eclipse
1.将eclipse安装完成后,开始点开使用。
2.选择工作环境的硬盘(一般可设置为D盘)。
3.创建一个项目,选择File—>New-->JavaProject;
4.创建一个类,例如选择项目,右键项目-->new—>class。
5.完成后,可以在代码框里输入代码。
<2>Skype环境搭建
1)新建工程
1.打开eclipse开发平台,选择File——New--JavaProject,设置Projectname为skype_dev_eg,点击finish完成工程新建。
2)导入相关包
1.右键点击工程skype_dev_eg——>点击Import——>双击FileSystem——>点击Browse选择要添加的源代码——>找到工程skype_dev_eg,点击确认,完成。
2.点击Windows—ShowView—Navigator——>双击src下的.classpath——>点击代码下的Source选项,删除中间4行代码,点击保存。
3)导入数据库
1.工作空间切换到Package——>右键单击工程skype_dev_eg,选择BuildPath|AddLibraries——>弹出框图中选择JRESystemLibrary,点击Next——>点击Finish,完成。
4)导入相关包
1.右击工程skype_dev_eg——>选择BuildPath|AddLibrabie——>在弹出框图中选择UserLibrary,点击Next——>弹出框图中输入用户类名字为Skype,点击OK——>单击左侧的AddExternalJARs按钮——>选中相关Jar文件,确定完成。
5)安装注册Skype。
<3>代码测试
1)代码实现
1.在两台主机上进行测试,Skype客户端开启以后,类似于腾讯QQ,俩人互相加为好友,AP2AP程序编写完毕,然后运行AP2AP。
运行操作:
右击程序,选中RunAs--2JavaApplication。
2.在程序第一次运行的时候,Java程序会在内容与Skype客户端进行通信,这里Skype会有一个提示,是否允许此通信过程,选择允许访问。
2)实验结果产生
5.源代码(含部分原理解释)
1、创建用于交互消息的代码,以实现两个应用程序的通信。
privatestaticStringcreateData(intlength,charcharacter){
byte[]data=newbyte[length];
Arrays.fill(data,(byte)character);
returnnewString(data);
}
2、连接到服务器的方法,通过调用Skype开发包中的Skype类的addApplication()方法,传入一个字符串类型的名字参数以新建一个Application实例,在这个实例的监听器中创建连接。
privatestaticStream[]connectToServer(Stringname)throwsSkypeException{
Applicationapplication=Skype.addApplication(name);
application.addApplicationListener(newApplicationAdapter(){
@Override
//创建特名字的Application,并注册入Skype实例中
publicvoidconnected(Streamstream)throwsSkypeException{
//调用printApplicationAndStreamName方法,将连接后的Stream信息打印出来
printApplicationAndStreamName("connected:
",stream);
}
@Override
publicvoiddisconnected(Streamstream)throwsSkypeException{
printApplicationAndStreamName("disconnected:
",stream);
}
privatevoidprintApplicationAndStreamName(Stringheader,Streamstream){
System.out.println(header+stream.getApplication().getName()+"-"+stream.getId());
}
});
//向所有的好友列表中的用户发出连接请求,此方法返回Stream数组
returnapplication.connectToAll();
}
}
二、Skype基本应用开发
一.实验内容
本次实验掌握Skype的基本应用开发,了解应用程序与Skype客户端联系原理,能够熟练创建一个工具菜单,并掌握Skype命令测试工具SkypeTrace开发。
二.实验目的
1、了解Skype客户端与应用程序的联系原理;
2、可以熟悉创建一个菜单工具;
3、掌握Skype命令测试工具SkypeTrace开发。
3.实验步骤
<1>创建工具菜单
1)添加菜单按钮
1.在skype_dev_eg工程下的com.skype.dev包里,新建一个类,类名为SkypeMenuTest.java,用来在skype菜单里显示一个菜单项。
2.在Skype中附加一个按钮,然后通过这个按钮来控制应用程序。
3.运行后再再打开Skype客户端菜单“工具”|“更多功能”,会出现新的菜单“Skype4Javamemu”(结果如下图)。
4.单击Skype4Javamenu按钮之后,执行程序中的menuItemClicked()方法,在控制台中就会打印出“Skype4Javamenuisclicked.”这个消息(如下图所示)。
2)Skype命令测试工具SkypeTracer开发
1.在skype_dev_eg工程的com.skype.dev包里,新建一个类名为SkypeTracer.java,用来实现测试SkypeAPI命令。
(原理在代码中解释。
)
2.代码完成后,点击运行(出现如下界面。
)
3.测试界面运行,输入"CREATEMENU_ITEMmuneItem2CONTEXTtoolsCAPTION"“Test”的命令,Skype的应答信息“MENU_ITEMmuneItem2CREATED”便随即显示出来(其效果图如下图所示)。
4.打开Skypeke客户端菜单“工具”|“更多功能”——>点击“Test”按钮(这时候执行了程序的menuItemClicked()方法)——>输入"CREATEMENU_ITEMmuneItem2CONTEXTtoolsCAPTION"“Test”的命令——>“MENU_ITEMmuneItem2CLICKEDCONTEXTtools”消息出现(如下图所示)。
5.运行结果(见步骤4.)
4.源代码(含部分原理解释)
1、用来在Skype中附加一个按钮,然后通过这个按钮来控制应用程序。
publicclassSkypeMenuTest{
@SuppressWarnings("deprecation")
publicstaticvoidmain(String[]args)throwsException{
Skype.setDebug(true);
Skype.setDeamon(false);
finalMenuItemitem=SkypeClient.addMenuItem(MenuItem.Context.TOOLS,"Skype4Javamenu",null,null,true,null,true);
item.addMenuItemListener(newMenuItemListener(){
publicvoidmenuItemClicked(MenuItemClickEventevent)throwsSkypeException{
System.out.println("Skype4Javamenuisclicked.");
event.getMenuItem().dispose();}});}}
2、在按钮上添加一个监听器,当单击按钮的时候,其操作被监听到,随之打印一条消息。
上述实现方法主要就是调用了SkypeClient类的addMenuItem()方法,其实现原理就是向Skype发送了这条命令,addMenuItem()方法说明如下。
publicstaticMenuItemaddMenuItem(MenuItem.Contextcontext,Stringcaption,Stringhint,FileiconFile,booleanenabled,StringtargetSkypeId,booleanmultipleContactsEnabled)throwsSkypeException{
try{
MenuItemmenuItem=MenuItem.addMenuItem(context,caption,hint,iconFile,enabled,targetSkypeId,multipleContactsEnabled);
Stringcommand="CREATEMENU_ITEM"+menuItem.getId()+"CONTEXT"+context.name().toLowerCase()+"CAPTION\""+caption+"\"";
if(hint!
=null){
command+="HINT\""+hint+"\"";
}
if(iconFile!
=null){
command+="ICON\""+iconFile.getAbsolutePath()+"\"";
}
if(!
enabled){
command+="ENABLEDfalse";
}
if(targetSkypeId!
=null){
command+="CONTACT_TYPE_FILTER\""+targetSkypeId+"\"";
}
if(!
multipleContactsEnabled){
command+="ENABLE_MULTIPLE_CONTACTSfalse";
}
StringresponseHeader="MENU_ITEM"+menuItem.getId()+"CREATED";
Stringresponse=Connector.getInstance().execute(command,responseHeader);
Utils.checkError(response);
returnmenuItem;
}catch(ConnectorExceptione){
Utils.convertToSkypeException(e);
returnnull;
}
}
3、SkypeTracer类是一个用来测试Skype命令的小程序,有一个简单的命令行输入界面,程序运行后根据初始条件建立到Skype客户端的连接,用户可以在此界面中输入与Skype通信的命令,并显示来自Skype的应答信息,类似于一个命令行控制终端,如shell。
publicclassSkypeTracerextendsShell{
publicstaticvoidmain(finalStringargs[])throwsException{
OSXConnector.disableSkypeEventLoop();
finalDisplaydisplay=Display.getDefault();
SkypeTracershell=newSkypeTracer(display,SWT.SHELL_TRIM);
shell.layout();
shell.open();
while(!
shell.isDisposed()){
if(!
display.readAndDispatch()){
display.sleep();
}
}
}
publicSkypeTracer(Displaydisplay,intstyle)throwsConnectorException{
super(display,style);
createContents();
}
4、SkypeTracer是用多线程的方式来实现的,因为可以同时开启多个SkypeTracer进程,用来跟Skype客户端通信。
privatevoidcreateContents()throwsConnectorException{
setText("SkypeTracer");
setSize(400,300);
finalGridLayoutgridLayout=newGridLayout();
gridLayout.numColumns=2;
setLayout(gridLayout);
finalTextfromSkype=newText(this,SWT.V_SCROLL|SWT.MULTI|SWT.READ_ONLY|SWT.BORDER);
fromSkype.setLayoutData(newGridData(GridData.FILL,GridData.FILL,true,true,2,1));
newThread(){
publicvoidrun(){
Connector.getInstance().setDebugOut(newPrintWriter(newWriter(){
@Override
publicvoidwrite(char[]cbuf,intoff,intlen)throwsIOException{
finalStringappended=newString(cbuf,off,len);
Display.getDefault().asyncExec(newRunnable(){
publicvoidrun(){
if(!
fromSkype.isDisposed()){
fromSkype.append(appended);
}
}
});
}
@Override
publicvoidflush()throwsIOException{
//Donothing
}
@Override
publicvoidclose()throwsIOException{
//Donothing
}
}));
try{
Connector.getInstance().setDebug(true);
}catch(ConnectorExceptione){
}
}
}.start();}
三、Skype基本业务功能实现
一.实验内容
真正熟练引用Skype的插件,完成对Skype的各种操作,也就是Skype的各种业务,例如呼叫、会话、自动应答等。
2.实验目的
1、掌握用Skype4java进行应用程序开发的基本步骤,
2、掌握Skype的基本业务功能开发,理解其代码实现。
3.实验步骤
<1>语音呼叫(通过应用程序的业务方法来操作Skype客户端,让Skype自动呼叫某个在线好友。
)
1)键入相关代码(主要是call()方法的调用,代码参见com.skype包下的Skype.java类里的Call()方法)。
2)验证程序和运行
1.打开Skype客户端,找到一个在线好友的ID-->在Eclipse中右击类文件MakeCall.Java-->选择Runas|RunConfiguration命令——>保证Project文本框中的名称是skype—dev—eg,Mainclass文本框中的名称为com.skype.dev.MakeCall——>选择“(X)=Arguments"标签——>在Programarguments区域中输入SkypelD号,单击Run按钮,开始运行程序。
<2>信息发送(向Skype的某一好友发送聊天消息,而此好友所在的Skype客户端则能接收到这个消息。
)
1)键入相关代码(利用了chat()方法和send()方法相关机制调用,代码参见com.skype包下的Skype.java类里的Chat()和Send()方法。
)
2)程序验证和运行
1.SendChatMessage类的运行,也需要输入相应的参数,参数的输入过程请参考MakeCall(即语音呼叫)类的运行方法。
(这里需输入两个参数,发送的消息在programarguments部分填写)。
<3>自动应答(启动了自动应答功能,此时每个给你发消息的好友,都由自动应答来回复消息。
)
1)键入相关代码(可见AutoAnswering.java,利用了监听器原理。
)
2)程序验证和运行
<4>呼叫转移(通过java应用程序来截取Skype客户端中来自好友的电话呼叫,并将此呼叫转发给任意对象)
1)键入相关代码(运用了CallForwarder.java类)
2)程序验证和运行
<5>呼叫终止(当在Skype客户端运行呼叫终止程序的时候,所有的此Skype客户端的呼叫都将被终止,这种终止包括两个方面的呼叫,一个是主叫,另一个是被叫)
1)键入相关代码(运用了ShutdownCall.java类,处理主叫的命令,为makedCall.finish(),处理被叫终止命令,为receivedCall.Finish())
2)程序验证和运行
4.源代码(含部分原理解释)
1、call()方法
publicstaticCall[]getAllActiveCalls()throwsSkypeException{
try{
Stringcommand="SEARCHACTIVECALLS";
StringresponseHeader="CALLS";
Stringresponse=Connector.getInstance().execute(command,responseHeader);
Stringdata=response.substring(responseHeader.length());
String[]ids=Utils.convertToArray(data);
Call[]calls=newCall[ids.length];
for(inti=0;i calls[i]=Call.getInstance(ids[i]); } returncalls; }catch(ConnectorExceptionex){ Utils.convertToSkypeException(ex); returnnull;}} 2、Chat()方法 privatestaticChat[]getAllChats(Stringtype)throwsSkypeException{ try{ Stringcommand="SEARCH"+type; StringresponseHeader="CHATS"; Stringresponse=Connector.getInstance().execute(command,responseHeader); Stringdata=response.substring(responseHeader.length()); String[]ids=Utils.convertToArray(data); Chat[]chats=newChat[ids.length]; for(inti=0;i chats[i]=Chat.getInstance(ids[i]); } returnchats; }catch(ConnectorExceptionex){ Utils
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- P2P 实验 报告 解读