openfire+smack 简单的 发送消息 demo及各种错误解决方案。

昨天搭建好了,openfire准备用写一个smack写一个发送消息的demo,为了方便接收端使用Spark。

使用eclipse的同学注意,创建项目时注意要吧smack与smackx两个包都导进来,只导入smack的话会出现一个

stream:error (conflict)

的错误,smackx中包含一些xml转java流的类。


运行项目时,如果端口被占用的话会出现一个

couldn't setup local SOCKS5 proxy on port 7777

的错误,只需要找到smack里的config.xml在其中把端口改掉就可以。


解决了这两个问题,项目大概可以运行了。发送端代码如下

public static void main(String[] main){
XMPPConnection.DEBUG_ENABLED=true;                                                     //开启调试
XMPPConnection conn = new XMPPConnection("127.0.0.1");                 //这里是服务器的地址,在本机上搭建openfire的话用127.0.0.1就可以
try{
conn.connect();
conn.login("wyl091256", "nihaoa");                                                                                   //发送端的用户名密码
Chat mychat=conn.getChatManager().createChat("wyl@20110710-2249",                                               //接收端的JID,这个JID是要加域的,不然会报错              
new MessageListener(){
@Override
public void processMessage(Chat chat,Message message){
String messageBody = message.getBody();  
            System.out.println("收到信息:" +messageBody+" "+message.getFrom()); 
}
});
System.out.println("我的好友列表:=======================" );  
Collection<RosterEntry> rosters = conn.getRoster().getEntries();  
for (RosterEntry rosterEntry : rosters){  
   System.out.print("name: " +rosterEntry.getName()+ ",jid: " +rosterEntry.getUser());     //此处可获取用户JID
   System.out.println("" );  
}  
System.out.println("我的好友列表:=======================" );  

                        mychat.sendMessage("fuck!");                                                                                                          //发送信息
conn.disconnect();                                                                                                                       //断开连接
System.out.println("finish");
}catch(Exception e){
System.out.println("wrong");
}
}


用户的JID一定要写对,如果不知道你自己的域是啥,可以通过roster.getUser()来获取某个好友的JID

不然在发送信息的时候,会出现这个错误,openfire很废物,很多错都报这个remote-server-not-found,很没有参考性。

<message id="w5Cne-4" to="wyl091256@20110710-2249/Smack" from="wyl" type="error">
<thread>3Fpv00</thread>
<error code="404" type="CANCEL">
<remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</message>

域这个东西,其实就是个安全性高级点的工作组,openfire好像会自动建立一个域,域名与时间有关。


不要忘记关闭,connection。


最后,登陆spark等待接受信息,运行工程,就会成功收到信息啦。

你可能感兴趣的:(eclipse,exception,Stream,String,smack,conflict)