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