Эй.Я искал решение этой проблемы без удачи.Мне было интересно, если это известная проблема при переключении кода сокета с WinXP 32-битной на Win7 64-битной.У меня есть довольно простая подпрограмма сокета, которая прекрасно работает в WinXP 32bit, но вызов socket.connect вызывает исключение «Невозможно установить соединение, потому что целевая машина активно отказала ему 127.0.0.1:48000"
IЯ добавил исключение в брандмауэр win7 для программы и дважды проверил, чтобы убедиться, что добавленное правило разрешает все порты.
Код, который я использую для настройки этих простых сокетов, выглядит следующим образом:
Прослушивающий сокет:
byte[] bytes = new Byte[8192];
IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 48000);
_ListenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
_ListenerSocket.Bind(localEndPoint);
_ListenerSocket.Listen(1000);
while (_Running)
{
_ListenerSync.Reset();
_ListenerSocket.BeginAccept(new AsyncCallback(AcceptCallback), _ListenerSocket);
_ListenerSync.WaitOne();
}
_ListenerSocket.Shutdown(SocketShutdown.Both);
_ListenerSocket.Close();
}
Соединительный сокет:
IPAddress _IP;
IPAddress.TryParse("127.0.0.1", out _IP)
Socket tTarget = null;
if (tTarget == null)
{
tTarget = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
tTarget.Connect(_IP, 48000);
_Connected = true;
byte[] tBuffer = new byte[8192];
string tRecvBuff = "";
while (_Connected)
{
int tRecv = tTarget.Receive(tBuffer);
//{ does stuff here }
}
Похоже, что все работает до tTarget.Connect (),где он останавливается на секунду, а затем выдает исключение, указанное выше.AcceptCallback никогда не вызывается.
Спасибо.