嘿。我一直在寻找解决这个问题的方法,但没有运气。我想知道是否在将套接字代码从WinXP 32位切换到Win7 64位时这是一个已知问题。我有一个相当简单的套接字例程,在WinXP 32bit中可以正常工作,但是socket.connect调用引发异常“由于目标机器主动拒绝它而导致无法连接”127.0.0.1:48000“无法在windows7 64bit中连接套接字
我已经为该程序的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 |找/我“听”看看你的节目是否真的在那个端口上收听。 – sarvesh 2011-04-04 20:35:18
@iaimtomisbehave好电话。有些东西看起来不正确。在netstat -a下它被列为“TCP [:: 1]:48000 compname:0 LISTENING”,我不太清楚那是什么意思。 – hookeslaw 2011-04-04 20:43:10
似乎在您的回送适配器上启用了IPV6,请尝试禁用它并测试您的代码。如果它有效,那么你可以修改你的代码来解决它。 – sarvesh 2011-04-04 20:51:57