我想在Windows 7中使用c#.net学习XMPP,所以我下载agsXMPP库和jspon,我编写以下代码仅用于测试,但我无法发送信息:
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:belkacemsend@jabber.org
这是输出:
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"
答案 0 :(得分: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);