嘿。我一直在寻找解决这个问题的方法,没有运气。我想知道在将套接字代码从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。
感谢。
答案 0 :(得分:3)
根据您对IPV6的评论。而不是
ipHostInfo.AddressList[0]
尝试
ipHostInfo.AddressList.ToList().Find(p=>p.AddressFamily==AddressFamily.InterNetwork);