初次接触XMPP(二):简单IM客户端实现文字交流

  首先要把下载的Smack的jar包导进工程。下面说的内容,Smack的smack_3_2_0\documentation\ 文件夹下都有介绍

1. 建立一个chat,服务器为Gmail,进行通话:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;

public class ChatTest
{
public static void main(String[] args)
{
String username
= "xxx@gmail.com";//gmail邮箱
String password = "xxxxxx";//邮箱密码
String serviceName = "gmail.com";//gmail的服务器名称

XMPPConnection connection
= new XMPPConnection(serviceName);
try
{
connection.connect();
//建立连接
connection.login(username, password);//登陆

String userChatTo
= "xxx@gmail.com";//要聊天的gmail邮箱

//建立一个聊天
Chat chat = connection.getChatManager().createChat(
userChatTo,
new MessageListener()
{
@Override
public void processMessage(Chat chat, Message msg)
{
System.out.println(msg.getFrom()
+ ": " + msg.getBody());
//接收对方的消息
}
});

BufferedReader reader
= new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String msg
= reader.readLine();
if(msg.equalsIgnoreCase("!q"))
break;
chat.sendMessage(msg);
//消息的发送
}
}
catch (XMPPException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}

}
}

  2. 接收外来的chat消息:

ChatManager chatmanager = connection.getChatManager().addChatListener(
  new ChatManagerListener()
  {
@Override
public void chatCreated(Chat chat, boolean createdLocally)
{
if (!createdLocally)
chat.addMessageListener(
new MyNewMessageListener());;
}
});

  3. 获得好友名单:

Roster roster = connection.getRoster();
Collection
<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries)
{
System.out.println(entry);
}

  4. 好友状态监听:

Roster roster = connection.getRoster();
roster.addRosterListener(
   new RosterListener()
  {
      public void entriesAdded(Collection<String> addresses) {}
      public void entriesDeleted(Collection<String> addresses) {}
  
public void entriesUpdated(Collection<String> addresses) {}
  
public void presenceChanged(Presence presence)
    {
   System.out.println(
"Presence changed: " + presence.getFrom() + " " + presence);
   }
  });

  5. 更改自己状态:
presence = new Presence(Presence.Type.unavailable);// 改为离线
connection .sendPacket(presence);

  6. 还有很多基础的documentation文件夹下都有介绍,javadoc下有各种类介绍。

posted on 2011-05-24 21:00  Jacob.coding  阅读(1437)  评论(0)    收藏  举报