轉自: http://www./beansoft/archive/2008/01/26/177886.html
基于開源軟件做個和GTalk聊天的小命令行程序
因為GTalk是基于Jabber的XMPP協議開發的,所以我們只要下載個Java 的XMPP協議類庫就能和GTalk聊天了,其實我好希望所有的IM廠商都互聯互通哦,這樣我就可以只裝一個客戶端,和所有人聊天。在這里我們下載的是 igniterealtime 提供的開源 Smack Java XMPP 軟件包,下載地址是:
http://www./downloads/index.jsp#smack ,然后點擊下載 smack_3_0_4.zip 。下載之后會得到一個ZIP文件,解壓縮后得到類庫文件:

包括了文檔和類庫。在這里我們只需要smack.jar和smackx.jar就可以了。好了,現在讓我們用Eclipse或者其它工具創建一個Java項目,將這兩個JAR文件加入進去。例如我這里用的Eclipse:

然后就是寫代碼測試了唄,下面是測試代碼:
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("beansoft@gmail.com", 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就能收到信息了:
哈哈,說起來跟Google那個簡介的界面的確有一拼啊,如果加個SWT或者Swing界面啥的,一個極其簡單的文本聊天客戶端就誕生了。
當然現在我們也可以自己搭建個聊天服務器來測試,把代碼里面所有的gmail.com都換成聊天服務器的IP就可以了,例如localhost,參考用開源軟件搭建企業內部協作平臺, Kill QQ MSN一文。