xmppxmpp 시작하기


비고

XMPP (Extensible Messaging and Presence Protocol)는 XML을 사용하여 두 개 이상의 네트워크 연결 엔터티간에 구조화 된 데이터를 거의 실시간으로 교환하는 네트워크 프로토콜입니다. XMPP는 인스턴트 메시징 및 현재 상태 프로토콜 ( RFC 2779 )에 대한 IETF 가이드 라인을 충족시키기 위해 만들어졌지만 그 목적은 IM을 훨씬 능가합니다. 또한 메시지 중심 미들웨어, M2M (Machine-to-Machine) 통신 및 IoT (Internet of Things)에 사용됩니다.

경량 XMPP 코어 프로토콜은 사용자에게

  • 강력한 인증
  • 전역 주소
  • 데이터 교환을위한 구조화되고 확장 가능한 형식

확장 가능한 접근 방식을 통해 XMPP 코어 위에 사용자 지정 프로토콜을 구축 할 수 있습니다.

핵심 XMPP 프로토콜은 RFC 6120에 정의되어 있으며 Internet Engineering Task Force (XMPP)에서 관리합니다. 인스턴트 메시징 확장은 RFC 6121에 정의되어 있으며 세 번째 문서 ( RFC 7622 )는 "Jabber Identifiers"(JAB)라고도하는 XMPP 주소의 형식을 정의합니다. 추가 기능은 커뮤니티에서 만들고 XMPP 표준 기반 (XSF)에서 관리하는 XMPP 확장 프로토콜 (XEP) 형식으로 지정됩니다.

버전

번역 노트 출시일
1.0 코어 : RFC 6120 , IM : RFC 6121 , 주소 : RFC 7622 2011-03-01
0.9 코어 : RFC 3920 , IM : RFC 3921 , 주소 : RFC 6122 2004-10-01

메시지 연결 및 전송

SleekXMPP (파이썬)

import sleekxmpp

client = sleekxmpp.Client("address@example.net", "password")
client.connect()
client.process(blocking=False)
client.send_message(mto="remote@example.net", mbody=self.msg)
 

Smack (자바 / Android)

XMPPTCPConnection connection = new XMPPTCPConnection("user", "password", "example.org")
connection.connect().login();
Message message = new Message("otheruser@example.net", "Hi, how are you?");
connection.sendStanza(message);
connection.disconnect();
 

agsxmpp 라이브러리를 사용하여 Xmpp 클라이언트 연결 만들기

public void OpenXmppConnection(int port, bool useSsl, string serverJid, string userName, string password)
        {
            try
            {
                _xmppClientConnection.AutoResolveConnectServer = true;
                _xmppClientConnection.Port = port;
                _xmppClientConnection.UseSSL = useSsl;
                _xmppClientConnection.Server = serverJid;
                _xmppClientConnection.Username = userName;
                _xmppClientConnection.Password = password;
                _xmppClientConnection.Resource = "web";


                //authenticate and open connection with server
                _xmppClientConnection.Open();
            }
            catch (Exception ex)
            {
            }
        }
 

채팅 세션 만들기 및 메시지 보내기

Smack (자바)

  • 스맥 4.1 사용
  • Smack as Maven 종속성을 프로젝트에 포함시키는 것이 좋습니다 (예 : gradle 또는 Maven 사용).
  • 그 외에도 다음과 같은 Smack 아티팩트 / 항아리를 클래스 패스에 수동으로 추가해야합니다 : smack-core, smack-extensions, smack-experimental, smack-im, smnack-tcp, smack-java7
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.chat.ChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;

public void sendMessage() {

XMPPTCPConnectionConfiguration config = 
  XMPPTCPConnectionConfiguration.builder()
            .setServiceName("mydomain.local")
            .setHost("127.0.0.1")
            .setPort(5222)
            .build();

XMPPTCPConnection connection = new XMPPTCPConnection(config);

connection.connect();
connection.login("test1", "test1pwd"); 

ChatManager chatManager = ChatManager.getInstanceFor(connection);
String test2JID = "test2@domain.example";
Chat chat = chatManager.createChat(test2JID);
chat.sendMessage("Hello, how are you?");

connection.disconnect();
}
 

agsxmpp 라이브러리를 사용하여 메시지 보내기

        public class ConversationManager
        {
            #region ClassMemeber
    
            private XmppClientConnection _xmppClientConnection = null;
    
    
    
     public ConversationManager(XmppClientConnection con)
            {
                _xmppClientConnection = con;
             }

 public void SendMessage(string message, string to, string guid, string type)
        {
            try
            {
                if (_xmppClientConnection != null)
                {
                    Jid jidTo = new Jid(to);
                    agsXMPP.protocol.client.Message mesg = new agsXMPP.protocol.client.Message(jidTo, _ConnectionWrapper.MyJid,
                        agsXMPP.protocol.client.MessageType.chat,
                                      message);

                    mesg.Id = guid;
                    mesg.AddChild(new agsXMPP.protocol.extensions.msgreceipts.Request());//request delievery
                    _xmppClientConnection.Send(mesg);
                }
            }
            catch (Exception ex)
            {
            }
        }

}