Re[2]: Проблема с OscarLib
От: ДимДимыч Украина http://klug.org.ua
Дата: 17.09.08 11:20
Оценка: 1 (1)
Здравствуйте, lexeich, Вы писали:

L>Почему?


Dns.EndGetHostEntry() что возвращает?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Проблема с OscarLib
От: lexeich Россия  
Дата: 17.09.08 07:56
Оценка:
Недавно у меня появилась задача — сделать прогаммную отправку сообщений на ICQ. Решил использовать для этого OscarLib. Скачал исходники из svn svn://shaim.net:41120/oscarlib/trunk. версия 0.1.3182.18129. Компилировал в VS2005. В проекте есть пример консольного приложения, и этот пример работает. Но вот тут и начались странности. У меня интернет — через VPN и если локальная сеть подключена, а VPN — нет, то при попытке подключения sess.Logon(_server, _port); примерно 10 секунд ничего не происходит, а потом вызывается исключение ошибки защиты памяти Access violation. Причем не относящееся к какой-то конкретной строке кода. Никак не могу это отловить. Если VPN подключен — то все работает как часы — подключается, отправляет сообщения

Уважаемы профессионалы, если кто-то сталкивался с подобными проблемами, поделитесь пожалуйста рецептом их устранения
Re: Проблема с OscarLib
От: lexeich Россия  
Дата: 17.09.08 10:57
Оценка:
Нашел что вызывает проблему в библиотеке. По аналогии с тем как это реализовано в библиотеке написал код, который ведет себя точно так же, но почему это так, никак не могу понять



using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace test2
{
    internal class MyClass
    {
        public MyClass()
        {
        }

        IAsyncResult result;

        public void start()
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            result = Dns.BeginGetHostEntry("login.icq.com", new AsyncCallback(CreateDCSEndDnsLookup), s);
        }

        private static void CreateDCSEndDnsLookup(IAsyncResult ar)
        {
            Console.WriteLine(" in CreateDCSEndDnsLookup");

            Socket s = ar.AsyncState as Socket;
            IPHostEntry hosts = null;

            hosts = Dns.EndGetHostEntry(ar);

            IPAddress address = hosts.AddressList[0];
            IPEndPoint ipep = new IPEndPoint(address, 5190);

            try
            {
                Console.WriteLine("Establishing Connection");
                s.BeginConnect(ipep, new AsyncCallback(Connect_Callback), s);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            Console.WriteLine(" out CreateDCSEndDnsLookup");
        }

        private static void Connect_Callback(IAsyncResult ar)
        {
            Console.WriteLine(" in Connect_Callback");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            MyClass mc = new MyClass();

            mc.start();

            Thread.Sleep(100000);
        }
    }
}


тоесть если я подключен к интернету, устанавливается подключение. А если я подключен к интернету, но фаервол блокирует дейтвия программы, то просходит Access violation exception.

Почему?
Re[3]: Проблема с OscarLib
От: lexeich Россия  
Дата: 19.09.08 18:15
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, lexeich, Вы писали:


L>>Почему?


ДД>Dns.EndGetHostEntry() что возвращает?



Спасибо за участие. Я разобрался. Оказывается дело в баге в .NET 2.0. После установки .NET framework 2.0 SP1 ошибка пропала
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.