2013-12-09 2 views
-1

xmpp를 사용하여 메시징 서비스를 구현하려고합니다. 나는 그것을 달성하기 위해 SMACK API와 gtalk를 사용하고있다.SMACK API 및 GTALK를 사용하여 메시지를 보내는 방법은 무엇입니까?

서버에 성공적으로 연결할 수 있습니다. 로스터의 사용자 목록도 얻습니다. 그러나 gtalk에서 모든 사용자에게 메시지를 보내려고하면 메시지가 전달되지 않습니다.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Collection; 

import org.jivesoftware.smack.Connection; 
import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.Roster; 
import org.jivesoftware.smack.RosterEntry; 
import org.jivesoftware.smack.Chat; 
import org.jivesoftware.smack.ChatManager; 
import org.jivesoftware.smack.MessageListener; 
import org.jivesoftware.smack.packet.Message; 
import org.jivesoftware.smack.packet.Presence; 
import org.jivesoftware.smack.SmackConfiguration; 
import org.jivesoftware.smack.SASLAuthentication; 

public class MySmackDemo implements MessageListener { 

public static String username="[email protected]"; 
public static String password="password"; 
public static String id=""; 
static ConnectionConfiguration config; 
XMPPConnection conn; 
public static Chat chat; 
public static XMPPConnection connection = new XMPPConnection("gmail.com"); 
public static boolean free=false; 

public static void main(String args[]){ 

    System.out.println("... in main function ......."); 
    MySmackDemo mySmackObj = new MySmackDemo(); 
    mySmackObj.connectTOGTalk(); 

    mySmackObj.displayBuddyList(); 
    System.out.println("-----"); 

      String msg=""; 

    try { 

    mySmackObj.sendMessage("hello from smack", "[email protected]"); 
    } 
    catch(Exception e){ 
     System.out.println("sending failed"); 
     e.printStackTrace(); 
    } 

} 

private static void connectTOGTalk(){ 

    try { 
     //establish connection between client and server. 
     connection.connect(); 
     System.out.println("Connected to " + connection.getHost()); 
     //call base class function to get login 
     connection.login(username,password); 

     System.out.println(connection.isAuthenticated()); 

     Presence presence = new Presence(Presence.Type.available); 
     connection.sendPacket(presence); 
     System.out.println("presence is ............" + presence.toXML()); 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

/* 
* Function to send message to specified user 
*/ 
public void sendMessage(String message, String to) throws XMPPException 
{ 
    System.out.println("Message is ......."+message); 
    Chat chat = connection.getChatManager().createChat(to, new MySmackDemo()); 

      System.out.println("Chat obj is ........"+ chat); 
} 
/** 
* Function to display user list 
*/ 
public void displayBuddyList() 
{ 
Roster roster = connection.getRoster(); 
roster.setSubscriptionMode(Roster.SubscriptionMode.manual); 
Collection<RosterEntry> entries = roster.getEntries(); 

System.out.println("\n\n" + entries.size() + " buddy(ies):"); 
for(RosterEntry r:entries) 
{ 
System.out.println(r.getUser()); 
System.out.println(r.getName()); 
} 
} 

public void processMessage(Chat chat, Message message) 
{ 
if(message.getType() == Message.Type.chat) 
System.out.println(chat.getParticipant() + " says: " + message.getBody()); 
} 
} 

나는이 오류가 무엇입니까 :

java.lang.NullPointerException 
at MySmackDemo.main(MySmackDemo.java:65) 
sending failed 

을 추가 설정/구성이 거기에 필요한 다음

내 코드? 메시지를 보내고 확인하는 방법은 무엇입니까?

답변

1

연결하기 전에이 코드를 추가하십시오. 그러면 config가 설정됩니다.

답변

/* this config I missed out */ 
    ConnectionConfiguration config = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com"); 
    config.setCompressionEnabled(true); 
    config.setSASLAuthenticationEnabled(false); 
    connection = new XMPPConnection(config);