C# 在windows7 64位中连接套接字时遇到问题

C# 在windows7 64位中连接套接字时遇到问题,c#,sockets,windows-7,64-bit,C#,Sockets,Windows 7,64 Bit,嘿。我一直在寻找解决这个问题的办法,但运气不好。我想知道在将套接字代码从Win32位切换到Win32 64位时,这是否是一个已知问题。我有一个相当简单的套接字例程,它在WinXP 32位中运行良好,但是socket.connect调用抛出异常“无法建立连接,因为目标计算机主动拒绝它127.0.0.1:48000” 我已经为程序的win7防火墙添加了一个例外,并进行了双重检查,以确保它添加的规则允许所有端口 我用于设置这些简单套接字的代码如下所示: 侦听套接字: byte[] bytes = ne

嘿。我一直在寻找解决这个问题的办法,但运气不好。我想知道在将套接字代码从Win32位切换到Win32 64位时,这是否是一个已知问题。我有一个相当简单的套接字例程,它在WinXP 32位中运行良好,但是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 }
}
连接插座:

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()之前一切都正常,在tTarget.Connect()中它会暂停一秒钟,然后抛出上面列出的异常。永远不会调用AcceptCallback


谢谢。

根据您的评论,您正在收听IPV6。而不是

ipHostInfo.AddressList[0]
试一试


根据您的评论,您正在收听IPV6。而不是

ipHostInfo.AddressList[0]
试一试


尝试运行netstat-ab-ptcp | find/i“侦听”以查看您的程序是否正在该端口上侦听。@iaimtomisbehave good call。有些东西看起来不对劲。在netstat-a下,它被列为“TCP[::1]:48000 compname:0正在侦听”,但我不太确定这意味着什么。似乎在环回适配器上启用了IPV6,请尝试禁用它并测试代码。如果有效,则可以修改代码以说明原因。请尝试运行netstat-ab-p tcp | find/i“listing”,查看您的程序是否正在该端口上侦听。@iaimtomisbehave good call。有些东西看起来不对劲。在netstat-a下,它被列为“TCP[::1]:48000 compname:0正在侦听”,但我不太确定这意味着什么。似乎在环回适配器上启用了IPV6,请尝试禁用它并测试代码。如果它有效,那么您可以修改您的代码来解释它。我尝试了此操作,我收到的
运算符“==”不能应用于“System.Net.Sockets.AddressFamily”和“string”类型的操作数。
。有什么想法吗?看起来AddressFamily是一个枚举,所以请尝试ipHostInfo.AddressList.ToList().Find(p=>p.AddressFamily==AddressFamily.InterNetwork);我尝试了此操作,但收到的
运算符“==”无法应用于“System.Net.Sockets.AddressFamily”和“string”类型的操作数。
。有什么想法吗?看起来AddressFamily是一个枚举,所以请尝试ipHostInfo.AddressList.ToList().Find(p=>p.AddressFamily==AddressFamily.InterNetwork);