1
import
java.util.
*
;
2 import java.io. * ;
3
4 import org.jivesoftware.smack.Chat;
5 import org.jivesoftware.smack.packet.Message;
6 import org.jivesoftware.smack.packet.Presence;
7 import org.jivesoftware.smack.ConnectionConfiguration;
8 import org.jivesoftware.smack.MessageListener;
9 import org.jivesoftware.smack.Roster;
10 import org.jivesoftware.smack.RosterEntry;
11 import org.jivesoftware.smack.RosterListener;
12 import org.jivesoftware.smack.XMPPConnection;
13 import org.jivesoftware.smack.XMPPException;
14
15
16 public class ChatClient implements MessageListener
17 {
18 XMPPConnection connection;
19
20 public void login(String userName, String password) throws XMPPException
21 {
22 ConnectionConfiguration config = new ConnectionConfiguration( " talk.google.com " , 5222 , " gmail.com " );
23 connection = new XMPPConnection(config);
24
25 connection.connect();
26 connection.login(userName, password);
27 }
28
29 public void sendMessage(String message, String to) throws XMPPException
30 {
31 Chat chat = connection.getChatManager().createChat(to, this );
32 chat.sendMessage(message);
33 }
34
35 public void displayBuddyList()
36 {
37 Roster roster = connection.getRoster();
38 roster.addRosterListener( new RosterListener() {
39 // Ignored events public void entriesAdded(Collection<String> addresses) {}
40 public void entriesDeleted(Collection < String > addresses) {}
41 public void entriesUpdated(Collection < String > addresses) {}
42 public void presenceChanged(Presence presence) {
43 System.out.println( " Presence changed: " + presence.getFrom() + " " + presence);
44 }
45 @Override
46 public void entriesAdded(Collection < String > arg0) {
47 // TODO Auto-generated method stub
48 System.out.println( " New Buddy Comes! " );
49 for (String x :arg0)
50 System.out.println( " Buddy: " + x + " Added " );
51 }
52
53 });
54
55 Collection < RosterEntry > entries = roster.getEntries();
56
57 System.out.println( " \n\n " + entries.size() + " buddy(ies): " );
58 for (RosterEntry r:entries)
59 {
60 System.out.println(r.getUser() + " " + r.getName());
61 }
62 }
63
64 public void deleteBuddy(String user) throws XMPPException
65 {
66 Roster roster = connection.getRoster();
67 Collection < RosterEntry > entries = roster.getEntries();
68 for (RosterEntry r:entries)
69 {
70 if (user.equals( r.getUser() ) )
71 {
72 roster.removeEntry(r);
73 break ;
74 }
75 }
76
77 }
78
79 public void createBuddy(String user, String name, String[] groups) throws XMPPException
80 {
81 Roster roster = connection.getRoster();
82 roster.createEntry(user, name, groups);
83
84 }
85
86 public void disconnect()
87 {
88 connection.disconnect();
89 }
90
91 public void processMessage(Chat chat, Message message)
92 {
93 if (message.getType() == Message.Type.chat)
94 System.out.println(chat.getParticipant() + " says: " + message.getBody() + " \r\n " );
95 }
96
97 public static void main(String args[]) throws XMPPException, IOException
98 {
99 // declare variables
100 ChatClient c = new ChatClient();
101 BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
102 String msg;
103
104
105 // turn on the enhanced debugger
106 XMPPConnection.DEBUG_ENABLED = true ;
107
108
109 // provide your login information here
110 c.login( " username " , " password " );
111
112
113 c.displayBuddyList();
114 System.out.println( " ----- " );
115 System.out.println( " Enter your message in the console. " );
116 System.out.println( " -----\n " );
117
118
119 while ( ! (msg = br.readLine()).equals( " bye " ))
120 {
121 // your buddy's gmail address goes here
122 c.sendMessage(msg, " [email protected] " );
123 }
124
125
126 c.disconnect();
127
128 System.exit( 0 );
129 }
130 }
2 import java.io. * ;
3
4 import org.jivesoftware.smack.Chat;
5 import org.jivesoftware.smack.packet.Message;
6 import org.jivesoftware.smack.packet.Presence;
7 import org.jivesoftware.smack.ConnectionConfiguration;
8 import org.jivesoftware.smack.MessageListener;
9 import org.jivesoftware.smack.Roster;
10 import org.jivesoftware.smack.RosterEntry;
11 import org.jivesoftware.smack.RosterListener;
12 import org.jivesoftware.smack.XMPPConnection;
13 import org.jivesoftware.smack.XMPPException;
14
15
16 public class ChatClient implements MessageListener
17 {
18 XMPPConnection connection;
19
20 public void login(String userName, String password) throws XMPPException
21 {
22 ConnectionConfiguration config = new ConnectionConfiguration( " talk.google.com " , 5222 , " gmail.com " );
23 connection = new XMPPConnection(config);
24
25 connection.connect();
26 connection.login(userName, password);
27 }
28
29 public void sendMessage(String message, String to) throws XMPPException
30 {
31 Chat chat = connection.getChatManager().createChat(to, this );
32 chat.sendMessage(message);
33 }
34
35 public void displayBuddyList()
36 {
37 Roster roster = connection.getRoster();
38 roster.addRosterListener( new RosterListener() {
39 // Ignored events public void entriesAdded(Collection<String> addresses) {}
40 public void entriesDeleted(Collection < String > addresses) {}
41 public void entriesUpdated(Collection < String > addresses) {}
42 public void presenceChanged(Presence presence) {
43 System.out.println( " Presence changed: " + presence.getFrom() + " " + presence);
44 }
45 @Override
46 public void entriesAdded(Collection < String > arg0) {
47 // TODO Auto-generated method stub
48 System.out.println( " New Buddy Comes! " );
49 for (String x :arg0)
50 System.out.println( " Buddy: " + x + " Added " );
51 }
52
53 });
54
55 Collection < RosterEntry > entries = roster.getEntries();
56
57 System.out.println( " \n\n " + entries.size() + " buddy(ies): " );
58 for (RosterEntry r:entries)
59 {
60 System.out.println(r.getUser() + " " + r.getName());
61 }
62 }
63
64 public void deleteBuddy(String user) throws XMPPException
65 {
66 Roster roster = connection.getRoster();
67 Collection < RosterEntry > entries = roster.getEntries();
68 for (RosterEntry r:entries)
69 {
70 if (user.equals( r.getUser() ) )
71 {
72 roster.removeEntry(r);
73 break ;
74 }
75 }
76
77 }
78
79 public void createBuddy(String user, String name, String[] groups) throws XMPPException
80 {
81 Roster roster = connection.getRoster();
82 roster.createEntry(user, name, groups);
83
84 }
85
86 public void disconnect()
87 {
88 connection.disconnect();
89 }
90
91 public void processMessage(Chat chat, Message message)
92 {
93 if (message.getType() == Message.Type.chat)
94 System.out.println(chat.getParticipant() + " says: " + message.getBody() + " \r\n " );
95 }
96
97 public static void main(String args[]) throws XMPPException, IOException
98 {
99 // declare variables
100 ChatClient c = new ChatClient();
101 BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
102 String msg;
103
104
105 // turn on the enhanced debugger
106 XMPPConnection.DEBUG_ENABLED = true ;
107
108
109 // provide your login information here
110 c.login( " username " , " password " );
111
112
113 c.displayBuddyList();
114 System.out.println( " ----- " );
115 System.out.println( " Enter your message in the console. " );
116 System.out.println( " -----\n " );
117
118
119 while ( ! (msg = br.readLine()).equals( " bye " ))
120 {
121 // your buddy's gmail address goes here
122 c.sendMessage(msg, " [email protected] " );
123 }
124
125
126 c.disconnect();
127
128 System.exit( 0 );
129 }
130 }
基本是从Smack的Doc里面抄出来的,然后自己简单的组合了一下
实现了几个最基本的功能,一个是查看buddy list列表,一个是聊天,一个是更新好友状态
没有图形界面,因为不会Java GUI
自己创建了两个jabber.org的帐号测试
PS:pidgin很好用,画面简介,虽然有时候会崩溃,不过也没出现几次……