XMPP协议学习(2)--Java 例子(与Google Talk互通)

转自: http://www.blogjava.net/beansoft/archive/2008/01/26/177886.html 

 

基于开源软件做个和GTalk聊天的小命令行程序

    因为GTalk是基于JabberXMPP协议开发的,所以我们只要下载个Java XMPP协议类库就能和GTalk聊天了,其实我好希望所有的IM厂商都互联互通哦,这样我就可以只装一个客户端,和所有人聊天。在这里我们下载的是 igniterealtime 提供的开源 Smack Java XMPP 软件包,下载地址是:

http://www.igniterealtime.org/downloads/index.jsp#smack ,然后点击下载 smack_3_0_4.zip 。下载之后会得到一个ZIP文件,解压缩后得到类库文件:

XMPP协议学习(2)--Java 例子(与Google Talk互通)_第1张图片

包括了文档和类库。在这里我们只需要smack.jarsmackx.jar就可以了。好了,现在让我们用Eclipse或者其它工具创建一个Java项目,将这两个JAR文件加入进去。例如我这里用的Eclipse:

XMPP协议学习(2)--Java 例子(与Google Talk互通)_第2张图片

然后就是写代码测试了呗,下面是测试代码:

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.Message;
import java.io.*;

public class ChatTest {

    public static void main(String[] args) throws Exception {
        XMPPConnection.DEBUG_ENABLED = true;

        XMPPConnection connection = new XMPPConnection("gmail.com");
        connection.connect();
        connection.login("MyEclipseJava", "
密码
******");
        Chat chat = connection.getChatManager().createChat("[email protected]", new MessageListener() {
            public void processMessage(Chat chat, Message message) {
                System.out.println(message.getFrom() + " " +  new java.util.Date().toLocaleString() + "
:" + message.getBody());
            }

        });
        BufferedReader cmdIn = new BufferedReader(new InputStreamReader(System.in));
        for(;;) {
          try {
             String cmd = cmdIn.readLine();
             if("!q".equalsIgnoreCase(cmd)) {
                 break;
             }
            chat.sendMessage(cmd);
          }catch(Exception ex) {
          }
        }
        connection.disconnect();
        System.exit(0);
    }
}

代码结构很简单,就是连接到gmail.com的聊天服务器,然后用MyEclipseJava这个账户登录,密码保密和谐成**了。createChat()方法连接您想说话的对象,然后创建消息监听器就行了。

后面的代码是循环从命令行读取信息并发给目标对象的,直到您输入!q就可以退出聊天了。这段程序的缺点大概就是不能更改聊天的目标对象吧,不过如果把它设置成报警提醒相信会非常有用,例如服务器出错等等,要是所有的IM都互联互通,这样会更有用的。

这段代码运行的时候会弹出个调试对话框来查看接受和发送的消息,您可以去掉 XMPPConnection.DEBUG_ENABLED = true; 这一句就不会再出来调试对话框了。

好了,运行代码:

输入消息并按下回车,这时候GTalk就能收到信息了:

XMPP协议学习(2)--Java 例子(与Google Talk互通)_第3张图片 

哈哈,说起来跟Google那个简介的界面的确有一拼啊,如果加个SWT或者Swing界面啥的,一个极其简单的文本聊天客户端就诞生了。

当然现在我们也可以自己搭建个聊天服务器来测试,把代码里面所有的gmail.com都换成聊天服务器的IP就可以了,例如localhost,参考用开源软件搭建企业内部协作平台, Kill QQ MSN一文。

---------------------------------------------------------------------------------------

posted on 2008-01-26 11:34 BeanSoft 阅读(1971) 评论(5)  编辑  收藏 所属分类: Open Source World

Comments

 

·         # re: 基于开源软件做个和GTalk聊天的小命令行程序

hanjs
Posted @ 2008-01-26 14:12
为何我执行不可以呢?

haha
Exception in thread "main" XMPPError connecting to talk2.l.google.com:5222.: remote-server-error(502) XMPPError connecting to talk2.l.google.com:5222.
-- caused by: java.net.ConnectException: Connection timed out: connect
at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:830)
at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1276)
at socket.ChatTest.main(ChatTest.java:15)
Nested Exception:
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:507)
at java.net.Socket.connect(Socket.java:457)
at java.net.Socket.<init>(Socket.java:365)
at java.net.Socket.<init>(Socket.java:178)
at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:815)
at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1276)
at socket.ChatTest.main(ChatTest.java:15)  回复  更多评论   

·         # re: 基于开源软件做个和GTalk聊天的小命令行程序

hanjs
Posted @ 2008-01-26 14:18
XMPPConnection connection = new XMPPConnection("gmail.com");
connection.connect();
连接不上!  回复  更多评论   

·         # re: 基于开源软件做个和GTalk聊天的小命令行程序[未登录]

beansoft
Posted @ 2008-01-26 15:07
网络问题,如果GTalk能连上,理论上是没问题的。  回复  更多评论   

·         # re: 基于开源软件做个和GTalk聊天的小命令行程序

zzg
Posted @ 2008-01-26 17:44
太好了,支持  回复  更多评论   

·         # re: 基于开源软件做个和GTalk聊天的小命令行程序[未登录]

jack
Posted @ 2008-01-27 10:55
刘老师,书写的怎么样了啊,给您拜早年了啊  回复  更多评论   

你可能感兴趣的:(exception,Google,服务器,smack,聊天,XMPP)