2015-02-05 25 views
1

我在使用smack 4.1.0-beta2連接到我的ejabberd 2.1.11服務器時遇到問題。我認爲這與SSL證書有關,並且不想處理那些我只是在不啓動TLS的情況下運行ejabberd的東西。我知道這是工作BC我能夠連接到使用psi的ejabberd沒有警告我一些自簽名證書。如何使用smack-android連接到安全禁用的ejabberd?

不管怎麼說,我使用以下ConnectionConfiguration的

XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder(); 
configBuilder.setUsernameAndPassword("username", "password"); 
configBuilder.setServiceName("myapp.ddns.net"); 
configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
configBuilder.setCompressionEnabled(false); 
AbstractXMPPConnection xmppConnection = new XMPPTCPConnection(configBuilder.build()); 

所以,當我嘗試xmppConnection.connect(),我得到以下例外

02-05 01:01:42.965 17047-17047/net.ddns.myapp W/DNSUtil﹕ Exception while resovling SRV records for myapp.ddns.net. Consider adding '_xmpp-(server|client)._tcp' DNS SRV Records 
    android.os.NetworkOnMainThreadException 
      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
      at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175) 
      at libcore.io.IoBridge.sendto(IoBridge.java:463) 
      at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182) 
      at java.net.DatagramSocket.send(DatagramSocket.java:287) 
      at de.measite.minidns.Client.query(Client.java:199) 
      at de.measite.minidns.Client.query(Client.java:174) 
      at de.measite.minidns.Client.query(Client.java:236) 
      at de.measite.minidns.Client.query(Client.java:149) 
      at org.jivesoftware.smack.util.dns.minidns.MiniDnsResolver.lookupSRVRecords(MiniDnsResolver.java:79) 
      at org.jivesoftware.smack.util.DNSUtil.resolveDomain(DNSUtil.java:162) 
      at org.jivesoftware.smack.util.DNSUtil.resolveXMPPDomain(DNSUtil.java:119) 
      at org.jivesoftware.smack.AbstractXMPPConnection.populateHostAddresses(AbstractXMPPConnection.java:551) 
      at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:506) 
      at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:810) 
      at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:355) 
      at net.ddns.myapp.MainActivity.onCreate(MainActivity.java:61) 
      at android.app.Activity.performCreate(Activity.java:4465) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) 
      at android.app.ActivityThread.access$600(ActivityThread.java:127) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4507) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
      at dalvik.system.NativeStart.main(Native Method) 

02-05 01:01:42.980 17047-17047/net.ddns.myapp E/MyApp﹕ Error while establishing XMPPConnection 
    org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: myapp.ddns.net:5222 Exception: null 
      at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:551) 
      at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:810) 
      at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:355) 
      at net.ddns.myapp.MainActivity.onCreate(MainActivity.java:61) 
      at android.app.Activity.performCreate(Activity.java:4465) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) 
      at android.app.ActivityThread.access$600(ActivityThread.java:127) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4507) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
      at dalvik.system.NativeStart.main(Native Method) 

回答

0

這是我的錯誤,我沒有意識到StrictMode.ThreadPolicy,沒有直接關係到Smack或ejabbe rd,這是基本的網絡。

找到了答案here

2

對於android.os.NetworkOnMainThreadException,你需要

if (android.os.Build.VERSION.SDK_INT > 9) { 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy);} 

你也可以嘗試設置主機值

configBuilder.setHost("myapp.ddns.net"); 
相關問題