java smack 例子_java实现简单XMPP发送消息和文件的简单例子 - 小茗的专栏 - CSDN博客...

首先xmpp server需要安装好配置并启动,这里只是实现简单的文本发送和文件发送,接受需要用xmpp client来接收

下载地址:http://www.igniterealtime.org/downloads/index.jsp

xmpp server(openfire)

xmpp client(spark)

Java XMPP client library(smack)

smack下载完后,压缩包里面有例子、api、和jar(smack.jar、smackx.jar、smackx-debug.jar、smackx-jingle.jar)根据需求引用这些jar

下面是一个简单的java代码,这是做简单测试,没有详细优化过(测试时发现个小问题:发文件需要对方加你为好友后,你发文件的时候才会显示,不加好友的话发送时是接收方有提示但是没看到发送过来的文件,如果是发生文本消息则没有这个问题)

首先spark为接收方登入

然后执行下面的java代码

package com.test.xmpp;

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.FileTransferManager;

import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;

/**

* @author test

*

*/

public class TestXmpp {

/**

* @param args

*/

public static void main(String[] args){

String user = "user@testHost/spark";

String host = "localhost";

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);

sendFile(user,getFile(),connection );

// sendTextMessage(user,connection);

}catch(Exception e){

e.printStackTrace();

}finally{

connection.disconnect();

}

}

public static File getFile(){

File file = new File("D:/test.jpg");

return file;

}

//发送文件

public static void sendFile(String user,File file,XMPPConnection connection )  throws Exception{

FileTransferManager manager = new FileTransferManager(connection);

OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(user);

long timeOut = 1000000;

long sleepMin = 3000;

long spTime = 0;

int rs = 0;

transfer.sendFile(file, "pls re 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("Hi Test Send Message........!");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
消息的通讯方式。通过XMPP协议,Java程序可以与其他XMPP客户端或服务器进行通信,实现实时聊天、在线状态监测、文件传输等功能。 XMPP是一种基于XML的协议,它采用长连接方式,建立一个持久的TCP连接,可以保持客户端与服务器之间的通信。Java程序可以通过XMPP协议建立连接、发送消息、接收消息和处理错误等操作。 1. 建立连接 Java程序需要首先建立与XMPP服务器的连接。连接的建立需要指定服务器地址、端口号、用户名和密码等信息。可以使用Smack库提供的XMPPConnection类来建立连接,如下所示: //连接XMPP服务器 XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setHost(server) .setPort(port) .setUsernameAndPassword(username,password) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) .build(); AbstractXMPPConnection conn = new XMPPTCPConnection(config); conn.connect(); conn.login(); 2. 发送消息 Java程序在建立连接之后,可以使用Smack库提供的ChatManager类发送消息。ChatManager类提供了创建和管理聊天的功能,可以通过它创建一个Chat对象,并使用该对象发送消息。如下所示: //发送消息 ChatManager chatManager = ChatManager.getInstanceFor(connection); Chat chat = chatManager.createChat(userJID); chat.sendMessage("Hello, world!"); 3. 接收消息 Java程序可以通过Smack库提供的MessageListener接口来接收XMPP服务器发送消息。MessageListener接口提供了messageReceived方法,当有消息到达时会调用该方法。如下所示: //接收消息 ChatManager chatManager = ChatManager.getInstanceFor(connection); chatManager.addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean createdLocally) { chat.addMessageListener(new MessageListener() { @Override public void processMessage(Chat chat, Message message) { System.out.println("Received message: " + message.getBody()); } }); } }); 通过以上三个步骤,Java程序就可以基于XMPP协议实现长连接,实现消息的收发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值