2017-03-11 10 views
0

私は基本的なxmppクライアントサーバー通信を理解しようとしています。私はejabberdサーバーをセットアップし、jitsiでテストしました。今Javaから私は最初のストリームXMLを送信し、サーバーから応答を得ることができます。Javaを使用したXMPPの基本的な接続

<?xml version='1.0'?> 
    <stream:stream to='192.168.1.18' 
     version='1.0' xmlns='jabber:server' 
    xmlns:stream='http://etherx.jabber.org/streams'> 

とサーバXMPPプログラミングクライアントガイドラインhttps://wiki.xmpp.org/web/Programming_XMPP_Clientsを1として

<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='13712777409692765897' from='192.168.1.18' version='1.0' xml:lang='en'><stream:features><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='GtsjYPujnBb89z2vC8P/arjzmdE='/><register xmlns='http://jabber.org/features/iq-register'/><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><compression xmlns='http://jabber.org/features/compress'><method>zlib</method></compression><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>SCRAM-SHA-1</mechanism><mechanism>PLAIN</mechanism><mechanism>X-OAUTH2</mechanism></mechanisms></stream:features> 

で応答し、サーバの応答後、クライアントは

<iq type='get' to='shakespeare.lit' id='auth1'> 
      <query xmlns='jabber:iq:auth'> 
      <username>bill</username> 
      </query> 
     </iq> 

とサーバ、すなわち、登録のためのIQを送信する必要があります応答します

<iq type='result' id='auth1'> 
      <query xmlns='jabber:iq:auth'> 
       <username/> 
       <password/> 
       <digest/> 
       <resource/> 
      </query> 
     </iq> 

その後、クライアントはユーザー名とパスワードでiqを再度送信します。 私は同じことをやろうとしていますが、最初の応答後には、それ以上のサーバー応答はnullです。私のコードは次のとおりです

public static void Sock() throws IOException, InterruptedException{ 

    String connect="<?xml version='1.0'?> " 
      + "<stream:stream " 
      + "to='192.168.1.18' version='1.0' " 
      + "xmlns='jabber:server' " 
      + "xmlns:stream='http://etherx.jabber.org/streams'> "; 

    String msg="<iq type='get' to='192.168.1.18' id='auth1'> " 
      + "<query xmlns='jabber:iq:auth'> " 
      + "<username>junaid</username> " 
      + "</query> " 
      + "</iq>"; 

     Socket socket = null; 
     try 
      { 
       String host = "192.168.1.18"; 
       int port = 5222; 
       InetAddress address = InetAddress.getByName(host); 
       socket = new Socket(address, port); 
       socket.setKeepAlive(true); 
       //Send the message to the server 
       OutputStream os = socket.getOutputStream(); 
       OutputStreamWriter osw = new OutputStreamWriter(os); 
       BufferedWriter bw = new BufferedWriter(osw); 
       bw.write(connect); 
       bw.flush(); 
       System.out.println("Message sent to the server : "+connect); 

       //Get the return message from the server 
       InputStream is = socket.getInputStream(); 
       InputStreamReader isr = new InputStreamReader(is); 
       BufferedReader br = new BufferedReader(isr); 
       String message = br.readLine(); 
       System.out.println("Message received from the server : " +message); 
       System.out.println(socket.isConnected()); 
       ///////Message 
       bw.write(msg); 
       bw.flush(); 
       System.out.println("Message sent to the server : "+msg); 
       System.out.println(socket.isConnected()); 
       //Get the return message from the server 
       is = socket.getInputStream(); 
       isr = new InputStreamReader(is); 
       br = new BufferedReader(isr); 
       message = br.readLine(); 
       System.out.println("Message received from the server : " +message); 

      } 
      catch (Exception exception) 
      { 
       exception.printStackTrace(); 
      } 
      finally 
      { 
       //Closing the socket 
       try 
       { 
        socket.close(); 
       } 
       catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 

    } 

私はソケットプログラミングには新しいので、誰かが私が間違っていることを私に導くことができれば、私は感謝するでしょう。上記の機能の 出力は、車輪の再発明しないでください

Message sent to the server : <?xml version='1.0'?> 
    <stream:stream to='192.168.1.18' 
     version='1.0' xmlns='jabber:server' 
     xmlns:stream='http://etherx.jabber.org/streams'> 
Message received from the server : <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='13712777409692765897' from='192.168.1.18' version='1.0' xml:lang='en'><stream:features><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='GtsjYPujnBb89z2vC8P/arjzmdE='/><register xmlns='http://jabber.org/features/iq-register'/><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><compression xmlns='http://jabber.org/features/compress'><method>zlib</method></compression><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>SCRAM-SHA-1</mechanism><mechanism>PLAIN</mechanism><mechanism>X-OAUTH2</mechanism></mechanisms></stream:features> 
true 
Message sent to the server : <iq type='get' to='192.168.1.18' id='auth1'> 
    <query xmlns='jabber:iq:auth'> 
     <username>junaid</username> 
    </query> 
</iq> 

true 
Message received from the server : null 

答えて

0

です - ちょうど、すでによく書かれたXMPPフレームワークを使用します。私はbabblerライブラリをお勧めできます。それはあなたにすてきで清潔なAPIを提供し、XMLを手作業で構築したり解析したりする必要はありません。

+0

私は通信プロセスを理解しようとしています。 –

+0

とバブルは、 – vitalyster

関連する問題