我的工作项目,支持P2P文件传输和它然后当我想,为什么不使用,而不是从头开始建立一个新的现有框架。我曾斯曼克/的Openfire XMPP协议库大约6年前,再次为上述目的。
的Jabber / XMPP服务器,支持P2P文件传输协议和遵循的顺口溜规范。所以我想测试如何使用了咂嘴API构建在Java中的聊天客户端。本教程将说明从Flex / Flash的相同。
下面是一个示例代码,可以连接到GoogleTalk服务器和所有的朋友列表。这也显示了一个例子,如何给定的用户发送聊天消息。
这里是您需要了解,然后再开始使用XMPP库的一些术语。名册
名册的名字出现在一个人的聊天客户端的联系人列表。 Google Talk条款,这是你会看到,一旦你登录的朋友列表。名册中的元素是您的联系人。其中每个项目确定一个唯一的标识符称为JID(Jabber的标识符)。
名册存储在服务器上,使XMPP客户端可以检索他们每次用户登录消息
这是在XMPP的基本三节之一。 (其他两个是智商和存在。)由于它是明显,一个消息节是用于发送IMS(即时消息)。智商
这是另一个非常重要的的诗节。 IQ代表信息/查询。它类似于传统的请求/响应范式,如HTTP。一个IQ节可以四种类型之一,"?? "设置?? "的结果吗??或"错误??前两个是请求或查询,而在过去两年的答复或信息。一个IQ节可以包装各种元素。让我们来看看这样一个例子。
朱丽叶登录到她的XMPP客户端。客户端发送一个类型XMPP智商节"呢??gmail.com服务器请求她的名册。
的存在<iq from=ashwin@gmail.com?/span> type=get?/span> id=roster_1?/span>> <query xmlns=jabber:iq:roster?> </iq>
这是第三节XMPP核心指定的类型。在外行的存在仅仅是指的可用性或接触的状态。
现在你熟悉一些基本术语,你会在库跨,我就开始粘贴一些代码,可以对GTtalk测试工作。
下面是一个示例的HelloWorld代码:{C}
下面是样品使用的实用工具类:/**
*
*/
package com.linkwithweb.demos;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collection;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferNegotiator;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
/**
* API With some Utitlity Methods
* @author Ashwin Kumar
*
*/
public class JabberSmackAPI implements MessageListener {
XMPPConnection connection;
private FileTransferManager manager;
public void setConnection(XMPPConnection connection) {
this.connection = connection;
manager = new FileTransferManager(connection);
}
public JabberSmackAPI() {
}
public void login(String userName, String password) throws XMPPException {
ConnectionConfiguration config = new ConnectionConfiguration(
"localhost", 5222, "Work");
connection = new XMPPConnection(config);
connection.connect();
connection.login(userName, password);
}
public void fileTransfer(String fileName, String destination)
throws XMPPException {
// Create the file transfer manager
// FileTransferManager manager = new FileTransferManager(connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
// Create the outgoing file transfer
OutgoingFileTransfer transfer = manager
.createOutgoingFileTransfer(destination);
// Send the file
transfer.sendFile(new File(fileName), "You won't believe this!");
try {
Thread.sleep(10000);
} catch (Exception e) {
}
System.out.println("Status :: " + transfer.getStatus() + " Error :: "
+ transfer.getError() + " Exception :: "
+ transfer.getException());
System.out.println("Is it done? " + transfer.isDone());
}
public void sendMessage(String message, String to) throws XMPPException {
Chat chat = connection.getChatManager().createChat(to, this);
chat.sendMessage(message);
}
public void displayBuddyList() {
Roster roster = connection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
System.out.println("\n\n" + entries.size() + " buddy(ies):");
for (RosterEntry r : entries) {
System.out.println(r.getName());
}
}
public void disconnect() {
connection.disconnect();
}
public void processMessage(Chat chat, Message message) {
if (message.getType() == Message.Type.chat)
System.out.println(chat.getParticipant() + " says: "
+ message.getBody());
}
public static void main(String args[]) throws XMPPException, IOException {
// declare variables
JabberSmackAPI c = new JabberSmackAPI();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String msg;
// turn on the enhanced debugger
XMPPConnection.DEBUG_ENABLED = true;
// Enter your login information here
c.login("ashwin", "ashwin@123");
c.displayBuddyList();
System.out.println("-----");
System.out.println("Who do you want to talk to?" +
" - Type contacts full email address:");
String talkTo = br.readLine();
System.out.println("-----");
System.out.println("All messages will be sent to " + talkTo);
System.out.println("Enter your message in the console:");
System.out.println("-----\n");
while (!(msg = br.readLine()).equals("bye")) {
c.sendMessage(msg, talkTo);
}
c.disconnect();
System.exit(0);
}
}
您可以从SVN检出上述项目,并测试它自己。与Jabber的乐趣。