|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,如今的立即通信软件满目琳琅,人人耳熟能详的不过就是腾讯公司的QQ,微软公司的MSNMessenger和网易的泡泡,就用户量而言这三者应当是压倒一切的。可是腾讯公司的QQ和网易的泡泡因为并没有公然其客户端与服务器之间的通信协定招致开辟者很难使用起这一复杂的用户群体来启示别的的服务渠道。MSNMessenger这一由天下头号软件商-微软公司开辟的立即通信软件,依附其与windows操纵体系和全部微软产物家属的严密分离,复杂有用、功能不乱、天下通用等特性,很快被中国用户承受,今朝其用户正在以多少数字增加。可是闪开发者雀跃的是该软件同时也供应了开放的API和开放的通信协定。出名的MSNPlus就是一款使用其API开辟的用于扩大MSNMessenger功效的插件。而我们明天要先容的jMSN则是封装了MSNMessenger开放的通信协定的JAVAAPI,经由过程这个API开辟者完整可使用JAVA言语摹拟出MSNMessenger软件,API的作者也供应一个用JAVA言语编写的在某方面功效乃至比MSNMessenger还壮大的MSN客户端软件。因为接纳了跨平台的JAVA言语开辟,因而该软件也可同时运转于其他操纵体系,今朝已经由测试的有各类Linux体系和MacOS上,固然另有视窗操纵体系。
jMSN是一个韩国人开辟的开放源码的API,能够从http://sourceforge.net/projects/jmsn/站点高低载,该项目标首页基础上以韩文为主,包含它的API文档的申明都是韩文。这个让我十分头疼,不外没有干系,由于jMSN十分复杂,假如没有甚么特别情形下不看那些申明也没有干系。jMSN的主页中供应两个部件供下载以下图所示,个中jmsn是一个完全的JAVA使用程序,下载解压后能够间接运转,运转的界面跟微软的MSNMessenger很相似,包含操纵上都十分分歧,假如你的操纵体系是Linux大概其他那都能够间接用它来替换微软的程序。别的一个是msnm-lib,这个就是我们明天要先容的API,它仅仅是一个开辟包,在jmsn组件中已包括了这个包。
你大概想先体验一下jmsn自带的程序看看究竟能完成甚么样的功效吧?解压jmsn紧缩包后的目次中会有一个可实行文件,不外假如你的JDK不是利用安装程序安装的,倡议你不必实行它,它会找不到jre的。你可使用命令行来启动这个程序,如许做有个优点是你还能够看到运转中打印出来的信息。
启动jMSN的命令:
java-jarjmsn.jar
jMSN的登录界面和主窗口以下图所示:
应当说这个界面跟MSNMessenger长短常相似的。用户能够经由过程它发送和吸收动静等。在启动jMSN的命令行窗口中能够看到jMSN与服务器之间通信的具体信息。
后面我们次要在先容jMSN也许的情形,先容它能完成甚么样的功效。上面我们入手下手来懂得怎样使用jMSN自带的API:msnm-lib来完成这些功效。下图是msnm-lib与jMSN包含MSN体系之间的干系,也就是说我们能够经由过程msnm-lib来完成与MSN服务器之间的通信而不必要我们往费心详细的通信协定的细节。现实上msnm-lib给我们做了更多的事变使得我们利用msnm-lib来开辟一个MSN使用程序变得十分的复杂,这也就是我后面提到的我们完整能够不往大概它所供应的韩文API文档的原因,由于利用它其实是太复杂了。
闽南语说:说破不值钱!闲话说了那末多,如今我们就入手下手来开辟我们本人基于JAVA的跨平台的MSN客户端程序。信任听到这句人人城市以为血脉收缩,没错,另有甚么比下手写程序更让人镇静的事变呢?况且仍是基于JAVA的、跨平台的!
我们先给出一段可运转的代码来完成一个最复杂的功效:当有人把它到场密友时,程序主动将之到场密友,当有人给它发送信息,程序主动复兴一条不异的信息。OK,完成这么复杂的功效的代码以下:
/*
*Createdon2003-11-21byLiudong
*/
packagejmsn.demo;
importrath.msnm.MSNMessenger;
importrath.msnm.SwitchboardSession;
importrath.msnm.UserStatus;
importrath.msnm.entity.MsnFriend;
importrath.msnm.event.MsnAdapter;
importrath.msnm.msg.MimeMessage;
/**
*MSN演示程序
*@authorLiudong
*/
publicclassMSNDaemonextendsThread{
privatestaticMSNMessengermsn;
publicstaticvoidmain(String[]args){
msn=newMSNMessenger("youraccount@hotmail.com","password");
msn.setInitialStatus(UserStatus.ONLINE);
msn.addMsnListener(newMSNAdapter(msn));
msn.login();
System.out.println("Waitingfortheresponse....");
//捕获Ctrl+C的输出以便刊出MSN的登录
Runtime.getRuntime().addShutdownHook(newMSNDaemon());
}
/**
*用户中断程序实行
*/
publicvoidrun(){
msn.logout();
System.out.println("MSNLogoutOK");
}
}
/**
*MSN动静事务处置类
*@authorLiudong
*/
classMSNAdapterextendsMsnAdapter{
MSNMessengermessenger;
publicMSNAdapter(MSNMessengermessenger){
this.messenger=messenger;
}
/**
*或人正在输出信息
*/
publicvoidprogressTyping(
SwitchboardSessionss,
MsnFriendfriend,
StringtypingUser){
System.out.println(friend.getLoginName()+"正在输出信息...");
}
/**
*收到动静的时分实行该办法
*/
publicvoidinstantMessageReceived(
SwitchboardSessionss,
MsnFriendfriend,
MimeMessagemime){
System.out.print("吸收到动静:"+friend.getFriendlyName()+"->");
System.out.println(mime.getMessage());
try{
//发送不异的复兴信息给发送者
messenger.sendMessage(friend.getLoginName(),mime);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*登录乐成后实行该办法
*/
publicvoidloginComplete(MsnFriendown){
System.out.println(own.getLoginName()+"LoginOK");
}
/**
*登录失利后实行该办法
*/
publicvoidloginError(Stringheader){
System.out.println("LoginFailed:"+header);
}
/**
*密友离线时实行该办法
*/
publicvoiduserOffline(StringloginName){
System.out.println("USER"+loginName+"Logout.");
}
/**
*密友上线时实行该办法
*/
publicvoiduserOnline(MsnFriendfriend){
System.out.println("USER"+friend.getFriendlyName()+"Login.");
}
/**
*有人加我为密友时实行
*/
publicvoidwhoAddedMe(MsnFriendfriend){
System.out.println("USER"+friend.getLoginName()+"Addme.");
try{
messenger.addFriend(friend.getLoginName());
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*有人把我从密友列表中删除时实行
*/
publicvoidwhoRemovedMe(MsnFriendfriend){
System.out.println("USER"+friend.getLoginName()+"Removeme.");
try{
messenger.removeFriend(friend.getLoginName());
}catch(Exceptione){
e.printStackTrace();
}
}
}
除两个经常使用的对象MsnFriend和MimeMessage分离用来暗示我的密友和MSN信息外,其他我们必要懂得的也就是MSNMessenger和MsnAdapter了。固然了条件是我们不必要除谈天外的其他功效,比方文件传输等等。类MSNMessenger对应着一个帐号的一次登录会话。我们仅仅是必要告知MSNMessenger类我们登录所用的帐号、暗码、登录后的初始形态和我们怎样来处置从MSN服务器上吸收到的任何信息。在msnm-lib中,处置MSN信息是经由过程一个叫MsnAdapter类来处置的,这个类界说了怎样处置比方收到动静、有人加我为密友等等的事务,开辟者能够重载这些办法以便举行自行处置。我们自行扩大MsnAdapter的类必需告知MSNMessenger实例晓得,这也就是我们后面代码中的msn.addMsnListener(newMSNAdapter(msn));自行扩大MsnAdapter的类是用来处置主动动静的,比方有人给我发动静等。当我们要发送动静给他人的时分就必要用到MSNMessenger的实例,这也就是我们为何要把MSNMessenger的实例传送给MSNAdapter的缘故原由,由于当我们吸收就任何动静时要给发送人复兴一条不异的信息。
到此我们后面提出的复杂功效已完成了,读者能够在本人的呆板长进行测试,运转时必要用到msnm-lib库,也就是msnm.jar文件。下图是运转时分的一个截图:
关于多人谈天:
MSN有别的一个不错的功效就是多人同时谈天,msnm-lib对这个功效撑持也十分好。在MsnAdapter中界说的办法instantMessageReceived的第一个参数范例为SwitchboardSession。当吸收到动静时,我们能够从这个参数中猎取多人谈天的一个会话标识,同时能够经由过程getMsnFriends来读取介入以后谈天的一切密友。当你要自动发送动静的时分你就必需从SwitchboardSession中读取一切的密友并给他们逐一发送信息。
关于文件传输:
大概这是我发明的关于msnm-lib的独一不敷,大概说还不敷完美的部分。经由测试发明利用微软的MSN程序能够一般传输文件的两台呆板用jMSN却没法传输,毛病信息都是说毗连超时,这两台呆板不在统一个子网。信任msnm-lib对这个功效并没有举行处置。因为并没有两台间接毗连Internet的呆板,因而关于jMSN的文件传输一向都没有举措来做一个实验,但愿新版本的msnm-lib能办理好这个成绩。
总结:
只管在文件传输上有点瑕疵,可是msnm-lib所供应的功效已十分棒了,最少在我第一眼看到它的时分内心说:没错,这就是我想要的工具!本文旨在先容怎样利用msnm-lib来完成一个复杂的MSN客户端,至于假如让它在实践的使用体系中发扬感化,读者们一定有比我更多的设法,好比说是不是能够使用它来丰厚客服的渠道等等,固然这些都凌驾我们的标题。如在利用中发明任何成绩,接待来信配合研讨。
首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。 |
|