2013-04-26 3 views
0

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

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

Я новичок в этот 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(); 
    } 
} 

ответ

1

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

j.User = "sample"; 
j.Server = "jabber.org"; 
j.Password = "secret"; 
+0

Я сделал то же, что и вы сказал. Тем не менее, я получаю ту же ошибку. ** «Невозможно прочитать данные из транспортного соединения: немедленная операция блокировки сокета не может быть завершена». ** Я думаю, что проблема связана с используемым портом. – csLijo

+0

если я укажу порт. Я получаю следующую ошибку. ** Не удалось выполнить попытку подключения, так как подключенная сторона не ответила должным образом через какое-то время или не удалось установить соединение, потому что подключенный хост не смог ответить 208.68.163.220:420** – csLijo

+1

, а затем приложите свой вывод отладки Xml к своему вопрос. Затем мы видим, что он вообще получает соединение и где он останавливается. – Alex

Смежные вопросы