【发布时间】:2011-04-04 20:07:03
【问题描述】:
嘿。我一直在寻找解决这个问题的方法,但没有运气。我想知道在将套接字代码从 WinXP 32 位切换到 Win7 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 }
}
似乎一切正常,直到 tTarget.Connect(),它暂停一秒钟,然后抛出上面列出的异常。永远不会调用 AcceptCallback。
谢谢。
【问题讨论】:
-
尝试运行 netstat -ab -p tcp | find /i "Listening" 看看你的程序是否真的在监听那个端口。
-
@iaimtomisbehave 好电话。有些东西在那里看起来不正确。在 netstat -a 下它被列为“TCP [::1]:48000 compname:0 LISTENING”,但我不太确定这是什么意思。
-
似乎在您的环回适配器上启用了 IPV6 尝试禁用它并测试您的代码。如果它有效,那么你可以修改你的代码来解决它。
标签: c# sockets windows-7 64-bit