Недавно у меня появилась задача — сделать прогаммную отправку сообщений на ICQ. Решил использовать для этого OscarLib. Скачал исходники из svn
svn://shaim.net:41120/oscarlib/trunk. версия 0.1.3182.18129. Компилировал в VS2005. В проекте есть пример консольного приложения, и этот пример работает. Но вот тут и начались странности. У меня интернет — через VPN и если локальная сеть подключена, а VPN — нет, то при попытке подключения sess.Logon(_server, _port); примерно 10 секунд ничего не происходит, а потом вызывается исключение ошибки защиты памяти Access violation. Причем не относящееся к какой-то конкретной строке кода. Никак не могу это отловить. Если VPN подключен — то все работает как часы — подключается, отправляет сообщения
Уважаемы профессионалы, если кто-то сталкивался с подобными проблемами, поделитесь пожалуйста рецептом их устранения
Нашел что вызывает проблему в библиотеке. По аналогии с тем как это реализовано в библиотеке написал код, который ведет себя точно так же, но почему это так, никак не могу понять
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.
Почему?
Здравствуйте, lexeich, Вы писали:
L>Почему?
Dns.EndGetHostEntry() что возвращает?
Здравствуйте, ДимДимыч, Вы писали:
ДД>Здравствуйте, lexeich, Вы писали:
L>>Почему?
ДД>Dns.EndGetHostEntry() что возвращает?
Спасибо за участие. Я разобрался. Оказывается дело в баге в .NET 2.0. После установки .NET framework 2.0 SP1 ошибка пропала