1.安装好openfire(教程:http://blog.csdn.net/hometing218/article/details/79570747)
2.下载个Spark
3.通过openfire注册好两个用户
4.登录spark后将刚注册好的两用户互相添加好友
5.登录代码如下:
package com.song.controller;
import org.apache.commons.lang.StringUtils;import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.chat.ChatManagerListener;
import org.jivesoftware.smack.chat.ChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
/**
* Created by huang(jy) on 2018/3/20.
*/
public class SmackClict {
public static void main(String[] args) {
try {
String serviceName = "192.168.20.125"; //openfire服务器名称
String host = "192.168.20.125"; //openfire服务器地址
int port = 5222; // 客户端到服务器,默认5222
String myUsername = "zyy"; //帐号
String myPassword = "123456"; //密码
String friendUsername = "huang"; //要发消息的对象名称
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
builder.setUsernameAndPassword(myUsername, myPassword);
builder.setServiceName(serviceName);
builder.setHost(host);
builder.setPort(port);
builder.setSecurityMode(SecurityMode.disabled);
builder.setDebuggerEnabled(false);
XMPPTCPConnectionConfiguration config = builder.build();
AbstractXMPPConnection c = new XMPPTCPConnection(config);
c.connect();
c.login();
System.out.println("Authenticated = " + c.isAuthenticated());
ChatManager chatmanager = ChatManager.getInstanceFor(c);
Chat newChat = chatmanager.createChat(friendUsername + "@" + serviceName);
final ChatMessageListener messageListener = new ChatMessageListener() {
@Override
public void processMessage(Chat arg0, Message message) {
String messageBody = message.getBody();
if (StringUtils.isNotBlank(messageBody)) {
try {
arg0.sendMessage("你刚说的是:" + messageBody);
} catch (Exception e) {
}
}
}
};
ChatManagerListener chatManagerListener = new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean arg1) {
chat.addMessageListener(messageListener);
}
};
chatmanager.addChatListener(chatManagerListener);
try {
newChat.sendMessage("我来咯");
} catch (Exception e) {
System.out.println("Error Delivering block");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
刚开始的时候在c.login()处一直报空指针的错,后来查证后是因为少引了个jar,引用jar如下
<dependency> <groupId>org.igniterealtime.smack</groupId><!--login时报空指针错就是因为没引这个jar--> <artifactId>smack-java7</artifactId> <version>4.1.8</version> </dependency> <dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-tcp</artifactId> <version>4.1.8</version> </dependency> <dependency> <groupId>org.igniterealtime.smack</groupId> <artifactId>smack-im</artifactId> <version>4.1.8</version> </dependency>
最后,通过spark登录其中一个帐号,代码登录另一个帐号给spark帐号发送消息(直接运行main函数),消息发送成功
如有转载请请务必保留此出处:http://blog.csdn.net/hometing218/article/details/79635455