package test;
import java.io.File;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.filetransfer.FileTransfer;
import org.jivesoftware.smackx.filetransfer.FileTransferListener;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
/**
* 演示XMPP发送接收消息和文件的功能
*
* @author 王杰
* @date 2010-1-14 16:59:24
*/
public class XMPPTest {
private static void handleTransferRequest(FileTransferRequest request) {
File file = new File(request.getFileName());
IncomingFileTransfer transfer = request.accept();
try {
transfer.recieveFile(file);
} catch (XMPPException e) {
e.printStackTrace();
}
}
/* 发送文件 */
public static void sendFile(FileTransferManager transferManager,
String user, File file, XMPPConnection connection) throws Exception {
OutgoingFileTransfer transfer = transferManager
.createOutgoingFileTransfer(user);
long timeOut = 100000;
long sleepMin = 3000;
long spTime = 0;
int rs = 0;
transfer.sendFile(file, "Send file!");
rs = transfer.getStatus().compareTo(FileTransfer.Status.complete);
while (rs != 0) {
rs = transfer.getStatus().compareTo(FileTransfer.Status.complete);
spTime = spTime + sleepMin;
if (spTime > timeOut) {
return;
}
Thread.sleep(sleepMin);
}
}
/* 发送文本 */
public static void sendTextMessage(String user, XMPPConnection connection)
throws Exception {
Chat chat = connection.getChatManager().createChat(user,
new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("Received message: " + message);
}
});
chat.sendMessage("Hello XMPP Message!");
}
public static void main(String[] args) {
String user = "test1@test.com/spark";
String host = "192.168.33.73";
int port = 5222;
String username = "test";
String password = "test";
ConnectionConfiguration config = new ConnectionConfiguration(host, port);
config.setCompressionEnabled(true);
config.setSASLAuthenticationEnabled(true);
XMPPConnection connection = new XMPPConnection(config);
try {
connection.connect();
connection.login(username, password);
/* 创建FileTransferManager的对象(须在connect()之后) */
FileTransferManager transferManager = new FileTransferManager(
connection);
/* 为transferManager添加接收文件监听 */
transferManager.addFileTransferListener(new FileTransferListener() {
public void fileTransferRequest(
final FileTransferRequest request) {
handleTransferRequest(request);
}
});
sendTextMessage(user, connection);
sendFile(transferManager, user, new File("D:/TestUUID.java"),
connection);
Thread.sleep(1000000);
} catch (Exception e) {
e.printStackTrace();
} finally {
connection.disconnect();
}
}
}