我正在我的应用中开发聊天功能。使用下面的代码,我能够连接到openfire和smackx进行连接和登录。一切都很好。不幸的是,openfire还没有确认xep。为了这个目的,我想通过mingism使用mod_stanza_ack。不幸的是,ejabberd2.1.11无法使用logcat中的错误登录。 我已经尝试了所有登录的变化但我得到了相同的错误,或者它只是没有登录但它可以连接到服务器。这肯定不是由于wifi和gsm的切换。有人可以帮忙吗?
连接和登录的代码:
public void init() throws XMPPException {
// for connecting to ejabberd2 and logging in. could connect but cannot login
ConnectionConfiguration connConfig = new ConnectionConfiguration(ip_address, 5222,
ProxyInfo.forDefaultProxy());
//for connecting to openfire and logging in. works fine.
//ConnectionConfiguration connConfig = new ConnectionConfiguration(ip_address);
//connConfig.setReconnectionAllowed(true);
connConfig.setSASLAuthenticationEnabled(false);
connection = new XMPPConnection(connConfig);
// Connect to server
try {
connection.connect();
System.out.println("Connected to " +
connection.getHost());
}
catch (XMPPException ex) {
System.out.println("Failed to connect " +
connection.getHost());
}
}
public void performLogin(String username, String password) throws
XMPPException {
if(connection!=null && connection.isConnected()){
// Login to server
System.out.println("Logging in...");
try {
connection.login(username, password);
System.out.println("Logged in as " + connection.getUser());
// packet listener: listen for incoming messages of type CHAT on the connection (whatever the buddy)
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener( packetListener = new PacketListener() {
public void processPacket(Packet packet) {
logcat的: 03-24 22:52:27.771:W / System.err(31926):java.net.SocketException:sendto failed:EPIPE(Broken pipe) 03-24 22:52:27.781:W / System.err(31926):at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506) 03-24 22:52:27.781:W / System.err(31926):at libcore.io.IoBridge.sendto(IoBridge.java:475) 03-24 22:52:27.781:W / System.err(31926):at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507) 03-24 22:52:27.781:W / System.err(31926):at java.net.PlainSocketImpl.access $ 100(PlainSocketImpl.java:46) 03-24 22:52:27.781:W / System.err(31926):at java.net.PlainSocketImpl $ PlainSocketOutputStream.write(PlainSocketImpl.java:269) 03-24 22:52:27.781:W / System.err(31926):at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167) 03-24 22:52:27.781:W / System.err(31926):at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158) 03-24 22:52:27.781:W / System.err(31926):at java.io.BufferedWriter.flush(BufferedWriter.java:124) 03-24 22:52:27.781:W / System.err(31926):at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:168) 03-24 22:52:27.781:W / System.err(31926):at org.jivesoftware.smack.PacketWriter.access $ 000(PacketWriter.java:40) 03-24 22:52:27.781:W / System.err(31926):at org.jivesoftware.smack.PacketWriter $ 1.run(PacketWriter.java:69) 03-24 22:52:27.781:W / System.err(31926):引起:libcore.io.ErrnoException:sendto failed:EPIPE(Broken pipe) 03-24 22:52:27.791:W / System.err(31926):at libcore.io.Posix.sendtoBytes(Native Method) 03-24 22:52:27.791:W / System.err(31926):at libcore.io.Posix.sendto(Posix.java:151) 03-24 22:52:27.791:W / System.err(31926):at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177) 03-24 22:52:27.791:W / System.err(31926):at libcore.io.IoBridge.sendto(IoBridge.java:473) 03-24 22:52:27.791:W / System.err(31926):... 9 more
答案 0 :(得分:1)
正如Mickael所说,服务器不接受连接。检查ejabberd日志的原因。显示的错误表示您在连接断开连接时尝试写入连接(Android : Socket - java.net.SocketException: sendto failed: EPIPE (Broken pipe))。
答案 1 :(得分:0)
你应该查看ejabberd日志。正如你所说,你已经为ejabberd添加了一个自定义模块,我的猜测是代码不兼容并使ejabberd客户端会话崩溃并因此断开客户端连接。