TCPClient套接字错误0x80004005的原因

时间:2018-09-24 22:11:59

标签: c# sockets tcpclient

“ System.Net.Sockets.SocketException(0x80004005):尝试以其访问权限禁止的方式访问套接字”

好的,我知道这个问题在S.O.上已经发生过很多次了,但是我找不到解决方案。这是我的问题:可能是什么原因造成的。

点:

  • 无论防火墙如何发生
  • 端口是开放的
  • 目的地是开放的,过去的连接一直在起作用
  • 由于连接正常,防火墙或病毒扫描程序无法进行任何更改。
  • 以管理用户身份运行
  • 源端口为23876
  • 目标端口是可变的,取决于从其他来源检测到的客户端
  • Windows 8.1

还有一点-移植到.NET Core后,也会发生此错误。

唯一的变化是我尝试共享端口,但看不到错误与错误之间的连接。要连接的代码是

 client = new TcpClient();
                         client.Client.SetSocketOption(
                             SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                         client.Client.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
                         client.Client.Bind(ipLocalEndPoint);
                         client.Client.Connect(ep);

重用本地端点的地方。

此错误的可能原因是什么?每次BIND调用都会发生这种情况。

1 个答案:

答案 0 :(得分:0)

好吧,这一切都使我变得非常愚蠢。

我已经做过的事情,而且忘记了我做过的事情,是在同一端口上建立一个TcpListener,此代码/// <summary> /// Used for getting DateTime.Now(), time is changeable for unit testing /// </summary> public static class SystemTime { /// <summary> /// Normally this is a pass-through to DateTime.Now, but it can be /// overridden with SetDateTime( .. ) for testing or debugging. /// </summary> public static Func<DateTime> Now = () => DateTime.Now; /// <summary> /// Set time to return when SystemTime.Now() is called. /// </summary> public static void SetDateTime(DateTime dateTimeNow) { Now = () => dateTimeNow; } /// <summary> /// Resets SystemTime.Now() to return DateTime.Now. /// </summary> public static void ResetDateTime() { Now = () => DateTime.Now; } } 无法正常工作。