smackx无法登录到ejabberd socketexception发送失败的管道坏了

时间:2015-03-24 14:53:54

标签: android login ejabberd

我正在我的应用中开发聊天功能。使用下面的代码,我能够连接到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

2 个答案:

答案 0 :(得分:1)

正如Mickael所说,服务器不接受连接。检查ejabberd日志的原因。显示的错误表示您在连接断开连接时尝试写入连接(Android : Socket - java.net.SocketException: sendto failed: EPIPE (Broken pipe))。

答案 1 :(得分:0)

你应该查看ejabberd日志。正如你所说,你已经为ejabberd添加了一个自定义模块,我的猜测是代码不兼容并使ejabberd客户端会话崩溃并因此断开客户端连接。