2017-03-31 23 views
6

Tôi bắt đầu openFire và thử nghiệm với mọi thứ mọi thứ đều ổn nhưng khi tôi cố gắng kết nối với smack 4.2.0 trong studio android tôi gặp lỗi này:Lỗi trên smack 4.2.0: IN AAAA mang lại phản hồi lỗi NX_DOMAIN

Ljavax/đặt tên/thư mục/InitialDirContext;

và phụ thuộc của tôi là thế này:

compile "org.igniterealtime.smack:smack-java7:4.2.0" compile "org.igniterealtime.smack:smack-tcp:4.2.0" compile "org.igniterealtime.smack:smack-im:4.2.0" compile "org.igniterealtime.smack:smack-extensions:4.2.0" compile "org.igniterealtime.smack:smack-android-extensions:4.2.0" compile "org.igniterealtime.smack:smack-bosh:4.2.0"

khi loại bỏ điều này: "biên dịch org.igniterealtime.smack: cú đập-java7: 4.2.0" từ phụ thuộc và thêm này: biên dịch "org. igniterealtime.smack: cú đập-android: 4.2.0" phụ thuộc của tôi trở nên như thế này:

compile 'com.android.support:appcompat-v7:24.0.0' compile "org.igniterealtime.smack:smack-android:4.2.0" compile "org.igniterealtime.smack:smack-tcp:4.2.0" compile "org.igniterealtime.smack:smack-im:4.2.0" compile "org.igniterealtime.smack:smack-extensions:4.2.0" compile "org.igniterealtime.smack:smack-android-extensions:4.2.0" compile "org.igniterealtime.smack:smack-bosh:4.2.0"

tôi có lỗi này:

org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: '192.168.209.2:5222' failed because: de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for 192.168.209.2. IN A yielded an error response NX_DOMAIN, '192.168.209.2:5222' failed because: de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for 192.168.209.2. IN AAAA yielded an error response NX_DOMAIN

phần mã mà làm lỗi khi tôi cố gắng để conn.connect() là thế này:

XMPPTCPConnectionConfiguration config = null; 
      try { 
       config = XMPPTCPConnectionConfiguration.builder() 
         .setUsernameAndPassword("admin", "thepass") 
         .setXmppDomain("192.168.1.3") 
         .setHost("192.168.209.2") 
         .setPort(5222) 
         .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
         .build(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
       AbstractXMPPConnection conn1 = new XMPPTCPConnection(config); 
       conn1.setReplyTimeout(60000); 
       conn1.setPacketReplyTimeout(60000); 
       conn1.connect(); 
+0

loại bỏ .setXmppDomain ("192.168.1.3") phương pháp này và setServiceName() và cung cấp tên người dùng và mật khẩu khi đăng nhập của bạn đến máy chủ XMPP –

+0

công trình này trong cú đập 4.1.6 và tôi đang sử dụng hiện tại nó hoạt động cho tôi nhờ có –

+0

có công việc của mình ở trên phiên bản 4.2.0 hiện tại tôi đang sử dụng 4.1.9 và nó hoạt động nhưng tôi cần phiên bản mới 4.2.0 – sadegh

Trả lời

11

Các lỗi bạn đã gặp được bắt nguồn từ không đầy đủ địa chỉ của máy chủ XMPP của bạn.

Hãy tưởng tượng kịch bản này:

my ejabberd server is running on this address: 192.168.209.2 #ejabberd server

Có một miền XMPP có tên là "localhost" Có hai JIDs,

"[email protected]" and "[email protected]"

Trong cú đập, tôi muốn để xác thực với người dùng của tôi, nói "Davood @localhost ". Sau đó, tôi làm điều đó như sau:

  InetAddress addr = InetAddress.getByName("192.168.209.2"); 
      HostnameVerifier verifier = new HostnameVerifier() { 
       @Override 
       public boolean verify(String hostname, SSLSession session) { 
        return false; 
       } 
      }; 
      DomainBareJid serviceName = JidCreate.domainBareFrom("localhost"); 
      XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 
        .setHost(server) # it will be resolved by setHostAddress method 
        .setUsernameAndPassword("davood","mypass") 
        .setPort(5222) 
        .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
        .setXmppDomain(serviceName) 
        .setHostnameVerifier(verifier) 
        .setHostAddress(addr) 
        .setDebuggerEnabled(true) 
        .build(); 
      AbstractXMPPConnection conn1 = new XMPPTCPConnection(config); 

      conn1.connect(); 

      if(conn1.isConnected()){ 
       Log.d("XMPP","Connected"); 
      } 
      conn1.login(); 

      if(conn1.isAuthenticated()){ 
       Log.d("XMPP","Authenticated"); 
       EntityBareJid jid = JidCreate.entityBareFrom("[email protected]"); 
       org.jivesoftware.smack.chat2.Chat chat = ChatManager.getInstanceFor(conn1).chatWith(jid); 
       chat.send("Eureka, I am connected!"); 


      } 
+1

cảm ơn u dadash, bạn sửa nó! – sadegh

7

Vui lòng kiểm tra: https://github.com/igniterealtime/Smack/wiki/Smack-4.2-Readme-and-Upgrade-Guide

Trong các phiên bản trước của Smack, ConnectionConfiguration.setHost (String) có thể được sử dụng để thiết lập địa chỉ IP máy chủ dịch vụ XMPP của. Điều này không còn khả thi do sự hỗ trợ DNSSEC được thêm vào. Bạn phải sử dụng cấu hình kết nối mới ConnectionConfiguration.setHostAddress (InetAddress) thay thế.

Bạn cũng có thể kiểm tra điều này.

failed because: de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for xxxx. \t IN \t AAAA yielded an error response NX_DOMAIN

Các vấn đề liên quan