无法在Windows 7 64位中连接套接字

时间:2011-04-04 20:07:04

标签: c# sockets windows-7 64-bit

嘿。我一直在寻找解决这个问题的方法,没有运气。我想知道在将套接字代码从WinXP 32位切换到Win7 64位时这是否是一个已知问题。我有一个相当简单的套接字例程,在WinXP 32bit中工作正常,但是socket.connect调用抛出异常“无法建立连接,因为目标机器主动拒绝它127.0.0.1:48000”

我为程序的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。

感谢。

1 个答案:

答案 0 :(得分:3)

根据您对IPV6的评论。而不是

ipHostInfo.AddressList[0]

尝试

ipHostInfo.AddressList.ToList().Find(p=>p.AddressFamily==AddressFamily.InterNetw‌​ork);