xmpp demo

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值