Проблема клиента Jabber с аутентификацией С#

Ниже приведен пример консольного приложения, использующего клиент jabber-net для отправки тестового сообщения после аутентификации соединения. Я получаю сообщение об ошибке при аутентификации запроса на вход. Ошибка приведена ниже.

"Невозможно прочитать данные из транспортного соединения: операция неблокирующего сокета не может быть завершена немедленно."

Я новичок в этом XMPP. Так много проектов, доступных в Интернете, но ни один из них не нашел подходящего. Пожалуйста, предоставьте ценную информацию или ссылки, которые могут быть полезны для разработки бесплатной клиентской библиотеки jabber для моего приложения.

Пример кода прикреплен ниже!

class Program
{
    // we will wait on this event until we're done sending
    static ManualResetEvent done = new ManualResetEvent(false);
    // if true, output protocol trace to stdout
    const bool VERBOSE = true;
    const string TARGET = "[email protected]";


    static void Main(string[] args)
    {
        JabberClient j = new JabberClient();
        j.User = "[email protected]";
        j.Server = "jabber.org"; // use gmail.com for GoogleTalk
        j.Password = "samplePassword";


        // don't do extra stuff, please.
        j.AutoPresence = false;
        j.AutoRoster = false;
        j.AutoReconnect = 30;

        // listen for errors.  Always do this!
        j.OnError += new bedrock.ExceptionHandler(j_OnError);

        // what to do when login completes
        j.OnAuthenticate += new bedrock.ObjectHandler(j_OnAuthenticate);

        // listen for XMPP wire protocol
        if (VERBOSE)
        {
           // j.OnLoginRequired += new bedrock.ObjectHandler(j_OnLoginRequired);
            j.OnReadText += new bedrock.TextHandler(j_OnReadText);
            j.OnWriteText += new bedrock.TextHandler(j_OnWriteText);
        }

        // Set everything in motion
        j.Connect();

        // wait until sending a message is complete
        done.WaitOne();

        // logout cleanly
        j.Close();
    }

    static void j_OnWriteText(object sender, string txt)
    {
        if (txt == " ") return;  // ignore keep-alive spaces
        Console.WriteLine("SEND: " + txt);
    }

    static void j_OnReadText(object sender, string txt)
    {
        if (txt == " ") return;  // ignore keep-alive spaces
        Console.WriteLine("RECV: " + txt);
    }

    static void j_OnAuthenticate(object sender)
    {
        // Sender is always the JabberClient.
        JabberClient j = (JabberClient)sender;
        j.Message(TARGET, "test");

        // Finished sending.  Shut down.
        done.Set();
    }

    static void j_OnError(object sender, Exception ex)
    {
        // There was an error!
        Console.WriteLine("Error: " + ex.ToString());

        // Shut down.
        done.Set();
    }
}

person csLijo    schedule 26.04.2013    source источник


Ответы (1)


В вашем примере кода вы используете [email protected] в качестве имени пользователя. Это полный голый джид. Имя пользователя (часть узла) в xmpp — это часть, предшествующая только «@». Поэтому попробуйте использовать sample в качестве имени пользователя вместо [email protected].

j.User = "sample";
j.Server = "jabber.org";
j.Password = "secret";
person Alex    schedule 27.04.2013
comment
я сделал то же самое, как вы сказали .. Тем не менее я получаю ту же ошибку. Невозможно прочитать данные из транспортного соединения: операция неблокирующего сокета не может быть завершена немедленно. Я думаю, что проблема связана с используемым портом. - person csLijo; 29.04.2013
comment
если я укажу порт. я получаю следующую ошибку. Попытка подключения не удалась, так как подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, поскольку подключенный хост не ответил 208.68.163.220:420 - person csLijo; 29.04.2013
comment
то, пожалуйста, прикрепите свой вывод отладки Xml к своему вопросу. Затем мы можем увидеть, получает ли он соединение вообще и где оно останавливается. - person Alex; 29.04.2013
comment
ОТПРАВИТЬ:‹stream:stream xmlns:stream=etherx.jabber.org/streams id=85af7ea f xmlns =jabber:client to=talk.google.com version=1.0› RECV: ‹stream:stream from=talk.google.com id=6FD09146E87A4A80 version=1.0 xmlns:stream=etherx.jabber.org/streams xmlns=jabber:client› RECV:‹stream:features›‹starttls xmlns=urn:ietf:params:xml:ns: xmpp-tls›‹требуется/›‹/starttls›‹механизмы xmlns=urn:ietf:params:xml:ns:xmpp-sasl›‹механизм›X-OAUTH2‹/механизм›‹механизм›X-GOOGLE-TOKEN‹ /механизм›‹/механизмы›‹/stream:features› - person csLijo; 29.04.2013
comment
‹stream:error›‹host-unknown xmlns=urn:ietf:params:xml:ns:xmpp-streams/› ‹str:text xmlns:str=urn:ietf:params:xml:ns:xmpp-streams›Установите атрибут 'to' элемента потока в доменной части JID пользователя. Пример: to='gmail.com' .‹/str:text›‹/stream:error›‹/stream:stream› SEND: ‹iq id=JN_1 type=get›‹query xmlns=jabber:iq:auth›‹ имя пользователя›physiaapp ‹/имя пользователя›‹/query›‹/iq› - person csLijo; 29.04.2013
comment
у вас есть talk.google.com в свойстве сервера, это должен быть gmail.com или что-то еще, что идет после @ в вашем идентификаторе Google при использовании приложений Google - person Alex; 29.04.2013
comment
спасибо .. все еще есть проблемы, связанные с портом. ** Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или установленное соединение не удалось, потому что подключенный хост не ответил 208.68.163.220:5222** Было бы неплохо, если бы вы попробовали мой пример кода и проверьте, сохраняется ли проблема. - person csLijo; 29.04.2013
comment
Вы включили разрешение SRV в jabber.net? Я думаю, что 208.68.163.220 не является правильным IP-адресом для jabber.org. - person Alex; 30.04.2013
comment
давайте продолжим это обсуждение в чате - person csLijo; 30.04.2013
comment
не могли бы вы взглянуть на вопрос ниже, пожалуйста.. stackoverflow.com/questions/16293173/ - person csLijo; 30.04.2013