java smack_用smack+openfire做即时通讯

import java.util.Collection;

import org.jivesoftware.smack.AbstractXMPPConnection;

import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;

import org.jivesoftware.smack.SmackException.NotConnectedException;

import org.jivesoftware.smack.StanzaListener;

import org.jivesoftware.smack.chat.Chat;

import org.jivesoftware.smack.chat.ChatManager;

import org.jivesoftware.smack.chat.ChatManagerListener;

import org.jivesoftware.smack.chat.ChatMessageListener;

import org.jivesoftware.smack.filter.StanzaFilter;

import org.jivesoftware.smack.packet.Message;

import org.jivesoftware.smack.packet.Presence;

import org.jivesoftware.smack.packet.Stanza;

import org.jivesoftware.smack.roster.Roster;

import org.jivesoftware.smack.roster.RosterListener;

import org.jivesoftware.smack.tcp.XMPPTCPConnection;

import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;

public class SmackClient {

public static void countPeople(Roster r){

System.out.println("在线人数变为:" + r.getEntryCount());

}

public static void go(){

try{

//对连接的配置

XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();

builder.setUsernameAndPassword("guoguo", "cc19881031");

builder.setServiceName("127.0.0.1");

builder.setHost("127.0.0.1");

builder.setPort(5222);

//不加这行会报错,因为没有证书

builder.setSecurityMode(SecurityMode.disabled);

builder.setDebuggerEnabled(true);

XMPPTCPConnectionConfiguration config = builder.build();

//建立连接并登陆

AbstractXMPPConnection c = new XMPPTCPConnection(config);

c.addPacketSendingListener(new StanzaListener(){

@Override

public void processPacket(Stanza st)

throws NotConnectedException {

System.out.println("in StanzaListener:" + st.getFrom());

}

}, new StanzaFilter(){

@Override

public boolean accept(Stanza st) {

System.out.println("in StanzaFilter:" + st.getFrom());

return false;

}

});

c.connect();

c.login();

final Roster roster = Roster.getInstanceFor(c);

Presence p = roster.getPresence("admin@127.0.0.1");

System.out.println(p.getType());

roster.addRosterListener(new RosterListener() {

public void entriesAdded(Collection arg0) {countPeople(roster);}

public void entriesDeleted(Collection addresses) {countPeople(roster);}

public void entriesUpdated(Collection addresses) {countPeople(roster);}

public void presenceChanged(Presence presence) {countPeople(roster);}

});

//            //设置是否在线状态,和状态说明

//            Presence presence = new Presence(Presence.Type.unavailable);

//            presence.setStatus("Gone fishing");

//            c.sendStanza(presence);

//会话管理者的建立和配置监听

ChatManager chatmanager = ChatManager.getInstanceFor(c);

chatmanager.addChatListener(new ChatManagerListener() {

@Override

public void chatCreated(Chat cc, boolean bb) {

//当收到来自对方的消息时触发监听函数

cc.addMessageListener(new ChatMessageListener() {

@Override

public void processMessage(Chat cc, Message mm) {

System.out.println(mm.getBody());

}

});

}

});

//建立会话

Chat chat = chatmanager.createChat("admin@127.0.0.1");

chat.getThreadID();

//发消息

Message msg = new Message();

msg.setBody("hello!");

chat.sendMessage(msg);

while(true);

}catch(Exception e){

e.printStackTrace();

}

}

public static void main(String[] args) {

go();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值