package com.jesse.xmpp;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Collection;
import java.util.List;
import org.jivesoftware.smack.AccountManager;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.OfflineMessageManager;
import org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager;
import org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamSession;
import org.jivesoftware.smackx.bytestreams.socks5.Socks5Proxy;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
public class XmppClient {
private static final String IP = "112.124.32.66";
// private static final String IP = "127.0.0.1";
private static final int PORT = 5222;
private static Connection conn;
private static void accountInfo() throws XMPPException{
AccountManager am = conn.getAccountManager();
for(String attr : am.getAccountAttributes()){
System.out.println("attr : " + attr);
}
//
// Map<String,String> m = new HashMap<String, String>();
// m.put("name", "冲天炮-测试注册");
// m.put("email", "u11@xxx.com");
// am.createAccount("u11", "1234",m);
// System.out.println("创建用户成功");
System.out.println("Instructions : " + am.getAccountInstructions());
System.out.println("createion : " + am.supportsAccountCreation());
}
private static void loginInfo() throws XMPPException{
// conn.login("user01", "1234");
conn.login("u01", "1234");
System.out.println("login user : " + conn.getUser());
System.out.println("Host : " + conn.getHost());
System.out.println("ServiceName : " + conn.getServiceName());
Presence presence = new Presence(Presence.Type.available);
presence.setStatus("我想聊天!");
conn.sendPacket(presence);
//注意,调用该方法的时候,必须在服务器中,也有指定roster才可以。
System.out.println("====================== roster info ======================");
Roster roster = conn.getRoster();
Collection<RosterEntry> entities = roster.getEntries();
System.out.println("roster count : " + entities.size());
for(RosterEntry entry : entities){
System.out.println("name : " + entry.getName());
System.out.println("user : " + entry.getUser());
System.out.println("status : " + entry.getStatus());
System.out.println("type : " + entry.getType());
}
System.out.println("====================== roster end ======================");
}
private static void charManager1() throws XMPPException{
ChatManager charManager = conn.getChatManager();
Chat chat = charManager.createChat("u03@ay1306251710323428ddz/Smack", new MessageListener() {
@Override
public void processMessage(Chat arg0, Message arg1) {
/* try {
arg0.sendMessage("dingding……" + arg1.getBody());
} catch (XMPPException e) {
e.printStackTrace();
}*/
System.out.println(arg1.toXML());
}
});
chat.sendMessage("你好啊!我的第一个用户!");
Message msg = new Message();
msg.setBody("这个是测试消息!");
msg.setProperty("color", "red");
chat.sendMessage(msg);
System.out.println("................");
}
private static void fileTransfer() throws XMPPException, IOException{
// File file = new File("E:/jesse/kugoo/胡夏 - 那些年.lrc");
File file = new File("E:/新标准三目.mdb");
final FileTransferManager manager = new FileTransferManager(conn);
final OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("u03@ay1306251710323428ddz/Spark 2.6.3");
// manager.addFileTransferListener(new FileTransferListener() {
//
// @Override
// public void fileTransferRequest(FileTransferRequest request) {
IncomingFileTransfer transfer = request.accept();
System.out.println("监听到一个文件!");
try {
transfer.recieveFile(new File("shakespeare_complete_works.txt"));
} catch (XMPPException e) {
e.printStackTrace();
}
//
// }
// });
// transfer.sendFile(file, file.getName());
FileInputStream fis = new FileInputStream(file);
byte[] datas = new byte[fis.available()];
fis.read(datas);
fis.close();
OutputStream os = transfer.sendFile(file.getName(), file.length(), file.getName());
os.write(datas);
os.flush();
os.close();
new Thread(new Runnable() {
@Override
public void run() {
while(!transfer.isDone()){
System.out.println("状态 : " + transfer.getStatus());
System.out.println("处理进度 : " + transfer.getProgress());
System.out.println("是否完成 : " + transfer.isDone());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("文件发送完毕!");
System.out.println("状态 : " + transfer.getStatus());
System.out.println("处理进度 : " + transfer.getProgress());
System.out.println("是否完成 : " + transfer.isDone());
}
}).start();
}
private static void testFileTransfer2() throws XMPPException, IOException, InterruptedException{
Socks5BytestreamManager manager = Socks5BytestreamManager.getBytestreamManager(conn);
Socks5BytestreamSession session = manager.establishSession("u03@ay1306251710323428ddz/Spark 2.6.3");
OutputStream stream = session.getOutputStream();
File file = new File("E:/新标准三目.mdb");
FileInputStream fis = new FileInputStream(file);
byte[] datas = new byte[fis.available()];
fis.read(datas);
fis.close();
stream.write(datas);
stream.flush();
stream.close();
System.out.println("发送完毕!");
}
private static void testOffline(){
OfflineMessageManager manager = new OfflineMessageManager(conn);
}
public static void main(String[] args) throws XMPPException, InterruptedException, IOException {
XMPPConnection.DEBUG_ENABLED = true;
SmackConfiguration.setLocalSocks5ProxyEnabled(true);
SmackConfiguration.setLocalSocks5ProxyPort(7778);
Socks5Proxy proxy = Socks5Proxy.getSocks5Proxy();
proxy.start();
ConnectionConfiguration cfg = new ConnectionConfiguration(IP,PORT);
conn = new XMPPConnection(cfg);
conn.connect();
System.out.println("isConnected : " + conn.isConnected());
loginInfo();
accountInfo();
charManager1();
// fileTransfer();
// testFileTransfer2();
// Thread.sleep(120 * 1000);
System.out.println("程序退出!");
}
}
转载于:https://my.oschina.net/mugg/blog/152910