2013-04-06 76 views
1

我想在Windows 7中使用C#.NET學習XMPP,所以我downlod agsXMPP庫和JSPON,我寫了下面的代碼只是爲了測試,但我不能發送PVC門:C#XMPP不連接

using System; 
using System.Collections.Generic; 

using System.Linq; 
using System.Text; 
using agsXMPP; 
using agsXMPP.protocol.client; 
using agsXMPP.Collections; 
using agsXMPP.protocol.iq.roster; 
using System.Threading; 

namespace ConsoleApplication1 

{ 
    class Program 
    { 
    static void xmpp_OnLogin(object sender) 
    { 
     Console.WriteLine("Logged In"); 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine("Login"); 
     Console.WriteLine(); 
     Console.WriteLine("JID: "); 
     string JID_Sender = Console.ReadLine(); 
     Console.WriteLine("Password: "); 
     string Password = Console.ReadLine(); 

     Jid jidSender = new Jid(JID_Sender); 
     XmppClientConnection xmpp = new XmppClientConnection(jidSender.Server); 

     xmpp.Open(jidSender.User, Password); 
     xmpp.OnLogin += new ObjectHandler(xmpp_OnLogin); 


     Presence p = new Presence(ShowType.chat, "Online"); 
     p.Type = PresenceType.available; 
     xmpp.Send(p); 

    } 


} 

}

輸入我的ID(只是爲了測試創建) usernme:[email protected]

這裏是輸出:

Exception:Thrown: "Object reference not set to an instance of an object." (System.NullReferenceException) 
A System.NullReferenceException was thrown: "Object reference not set to an instance of an object." 


Exception:Caught: "Object reference not set to an instance of an object." (System.NullReferenceException) 
A System.NullReferenceException was caught: "Object reference not set to an instance of an object." 


Exception:Thrown: "A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied" (System.Net.Sockets.SocketException) 
A System.Net.Sockets.SocketException was thrown: "A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied" 


Exception:Caught: "A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied" (System.Net.Sockets.SocketException) 
A System.Net.Sockets.SocketException was caught: "A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied" 

回答

1

你的問題是,你需要等待OnLogin將提高

xmpp.Open(jidSender.User, Password); 
xmpp.OnLogin += new ObjectHandler(xmpp_OnLogin); 

// Wait here 

Presence p = new Presence(ShowType.chat, "Online"); 
p.Type = PresenceType.available; 
xmpp.Send(p); 

本文就codeproject.com有此Creating a Jabber Client using the agsXMPP Library,不是最好的解決方案,但它是良好的開端。

bool isLoggedIn = false; 
xmpp.OnLogin += (sender) => { isLoggedIn = true; }; 
xmpp.Open(jidSender.User, Password); 

while (isLoggedIn == false) 
{ 
    System.Threading.Thread.Sleep(100); 
} 

Presence p = new Presence(ShowType.chat, "Online"); 
p.Type = PresenceType.available; 
xmpp.Send(p);