- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遵循了一系列教程并提出了一个非常简单和简约的 Java 应用程序,它应该连接到 google talk 并允许我向帐户发送消息。
我已关闭 SASLAuth 安全设置以使该示例正常工作,但是当我尝试连接到谷歌服务器时,我收到一个复杂的 TLS 错误,我认为我被迫启用 SASLAuth 安全设置。但是,如果启用它们,则会出现另一个错误。这是我正在使用的非常简单的代码示例。我错过了什么?
XmppManager.java:
package try2;
import java.util.Collection;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
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.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Type;
public class XmppManager {
private static final int packetReplyTimeout = 500; // millis
private String server;
private int port;
private String service;
private ConnectionConfiguration config;
private XMPPConnection connection;
private ChatManager chatManager;
private MessageListener messageListener;
public XmppManager(String aServer, int aPort, String aService) {
server = aServer;
port = aPort;
service = aService;
}
public XmppManager(String server, int port) {
this(server, port, null);
}
public void init() throws XMPPException {
System.out.println(String.format("Initializing connection to server " + server + ", port " + port
+ ", service " + service));
SmackConfiguration.setPacketReplyTimeout(packetReplyTimeout);
if(service != null)
config = new ConnectionConfiguration(server, port, service);
else
config = new ConnectionConfiguration(server, port);
config.setSASLAuthenticationEnabled(false);
config.setSecurityMode(SecurityMode.disabled);
connection = new XMPPConnection(config);
connection.connect();
System.out.println("Connected: " + connection.isConnected());
chatManager = connection.getChatManager();
messageListener = new MyMessageListener();
}
public void performLogin(String username, String password) throws XMPPException {
if (connection!=null && connection.isConnected()) {
connection.login(username, password);
}
}
public void setStatus(boolean available, String status) {
Presence.Type type = available? Type.available: Type.unavailable;
Presence presence = new Presence(type);
presence.setStatus(status);
connection.sendPacket(presence);
}
public void destroy() {
if (connection!=null && connection.isConnected()) {
connection.disconnect();
}
}
public void sendMessage(String message, String buddyJID) throws XMPPException {
System.out.println(String.format("Sending message " + message + " to user " + buddyJID));
Chat chat = chatManager.createChat(buddyJID, messageListener);
chat.sendMessage(message);
}
public void createEntry(String user, String name) throws Exception {
System.out.println(String.format("Creating entry for buddy " + user + " with name " + name));
Roster roster = connection.getRoster();
roster.createEntry(user, name, null);
}
public void printRoster() throws Exception {
Roster roster = connection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
System.out.println(String.format("Buddy:" + entry.getName() + " - Status:" + entry.getStatus()));
}
}
private class MyMessageListener implements MessageListener {
@Override
public void processMessage(Chat chat, Message message) {
String from = message.getFrom();
String body = message.getBody();
System.out.println(String.format("Received message " + body + " from " + from));
}
}
}
XmppTest.java:
package try2;
public class XmppTest {
public static void main(String[] args) throws Exception {
String username = "user1";
String password = "user1.pass";
XmppManager xmppManager = new XmppManager("talk.google.com", 5222, "gmail.com");
xmppManager.init();
xmppManager.performLogin(username, password);
xmppManager.setStatus(true, "Hello everyone");
String buddyJID = "user2";
String buddyName = "user2";
xmppManager.createEntry(buddyJID, buddyName);
xmppManager.sendMessage("Hello mate", "user2@gmail.com");
xmppManager.printRoster();
boolean isRunning = true;
while (isRunning) {
Thread.sleep(50);
}
xmppManager.destroy();
}
}
我认为错误与这两个代码行有关:
config.setSASLAuthenticationEnabled(false);
config.setSecurityMode(SecurityMode.disabled);
但是,如果是,那么我不知道如何正确配置它们!
禁用 SASLAuth 时出错:
Initializing connection to server talk.google.com, port 5222, service gmail.com
java.lang.IllegalStateException: TLS required by server but not allowed by connection configuration
at org.jivesoftware.smack.XMPPConnection.startTLSReceived(XMPPConnection.java:768)
at org.jivesoftware.smack.PacketReader.parseFeatures(PacketReader.java:414)
at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:254)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:46)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:72)
Connected: true
Exception in thread "main" No response from the server.:
at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:73)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:252)
at org.jivesoftware.smack.Connection.login(Connection.java:366)
at try2.XmppManager.performLogin(XmppManager.java:70)
at try2.XmppTest.main(XmppTest.java:13)
启用 SASLAuth 时出错:
Exception in thread "main" SASL authentication PLAIN failed: invalid-authzid:
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:342)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:243)
at org.jivesoftware.smack.Connection.login(Connection.java:366)
at try2.XmppManager.performLogin(XmppManager.java:70)
at try2.XmppTest.main(XmppTest.java:13)
最佳答案
把这两行改成
config.setSASLAuthenticationEnabled(true);
config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
关于java - 无法将简单的 Java Smack 示例连接到 Google Talk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280929/
Google Talk如何工作?当我连接到我的 friend 进行谈话时,什么充当 中级 一个转移我的声音?那是它背后的谷歌服务器(充当中间人?还是提供点对点协议(protocol)? 最佳答案 他们
我有两个(Java)进程在不同的 JVM 上重复运行。第一个经常发现一些“信息”并需要将其存储在某个地方。第二个进程定期读取此信息来处理它。这些间隔或多或少是随机的,因此进程 1 可能会找到三条信息,
我想创建一些服务,该服务将作为简单进程运行,并为其他应用程序提供向他发送 xml 流的可能性。 我的意思是创建具有无限循环的简单进程 (exe) - 任何应用程序都能够将 XML(文件/流)发送到该进
我想知道(官方)GTalk 客户端如何设法显示接收到的所有 消息——即使它最初是由另一个客户端使用的。例如:我在笔记本电脑上登录 gmail.com 上的 GTalk,同时在我的 Android 设备
Google GTalk 客户端(web、android、windows)具有从服务器获取对话历史的强大能力,即使对话是在另一个 jabber 客户端完成的。 什么 jabber (XMPP) 功能
我知道一旦调用函数,this 的上下文就会更改为对象,但如何在无需创建方法的情况下模拟该上下文? var object = { x: 1, y: object.x, //
Google Talk 如何播放当前歌曲?我可以使用 .net 执行此操作吗? 编辑:看起来每个玩家都有自己的 SDK 供使用 温安普 :这是一个关于要使用的类的好帖子:http://forums.w
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
当我们为android或ios应用程序安装代理时,我们通常会添加一些库并更改一些配置设置。仅添加一个库如何使该应用程序记录事件并将其推送到 monkey talk IDE。 通常我们在项目中添加库的时
我是一名大学生。我正在上我的第二个 comp sci 类(class),我们还没有太多简单地在其中制作类和函数,所以我还没有真正能够充分利用我在互联网上找到的复杂行话。 我正在制作蟑螂出没模拟游戏,我
我正在开发一个 Android 应用程序,其中显示了 Google Talk 联系人及其状态 - 这工作正常。 我不确定应该调用哪个 Intent 来使用默认的 Talk 应用打开聊天窗口。 我如何知
我一直在努力弄清楚 TED Talk homepage 到底是怎么回事作品。撇开所有的动画垃圾不谈,我发现盒子的组织方式真的很迷人。 乍一看,它看起来像 jQuery masonry plugin ,
我想知道如何通过特殊客户端为 Google Talk 创建聊天机器人。 我知道它使用 XMPP 发送消息,但我完全不知道如何使用它。据我了解,如果我要创建自己的客户端页面,我应该能够制作一个机器人,当
几天来,我一直在尝试通过 SmartBand Talk (SWR30) 发送 Google 文字转语音音频。我对 AndroidManifest.xml 拥有正确的权限 PERMISSION_CONT
我设置了一个在预览控制台中运行的 GoogleHome 操作 我会写“用行动说话” 我得到我的答案 如何用法语测试 GoogleHome 上的该操作?任何解决方法? 我尝试在移动应用程序中使用别名来触
我正在尝试使用PHP连接到Google Talk XMPP服务器。我成功建立了连接并使用X-OAUTH2登录。然后Google要求我建立TLS连接。但是,当尝试将连接升级到TLS时,出现异常:stre
我是扩展程序编程的新手,但发现在 Chrome 中制作扩展要容易得多,但现在我正在尝试将我的测试扩展移植到 FF,我有几个问题如何做与我在 Chrome 中所做的相同的事情。 .现在在FF。 例如:在
FB 公开了此 EdgeRank 指标(显示在每个页面上) - 现在如何访问它来收集统计数据? 最佳答案 几周前我向 Facebook 团队询问了此事;看来当时它被忽视了,他们会调查它。我今天刚刚检查
我正在尝试使用 Monkey Talk 进行自动化测试。我安装成功了。我在 Eclipse Juno 上运行示例应用程序,然后创建一个新的 Monkey 脚本并记录操作。 问题是 Monkey IDE
有谁知道 Google Talk 浏览器插件是否可供网络应用程序开发人员使用?我说的是用 HTML/JavaScript 来操作它。 Google Talk 开发网站似乎只为想要开发独立客户端/服务器
我是一名优秀的程序员,十分优秀!