UdpClient构造函数抛出SocketException异常

3

我在构造一个指定IPv4家族的UdpClient对象时遇到了异常。这只发生在一台Windows 7 64位机器上,其他使用相同操作系统的机器正常工作。

具体的异常信息如下:

System.Net.Sockets.SocketException (0x80004005): An invalid argument was supplied
   at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
   at System.Net.Sockets.UdpClient.createClientSocket()

SocketException.ErrorCode 是 WSAEINVAL 10022,即无效参数。

抛出此异常的代码:

this.udpClient = new UdpClient(AddressFamily.InterNetwork);

有人能解释一下这个异常告诉我什么吗?IPv4怎么会成为新UDP客户端的无效参数?

更新:只有在从网络驱动器运行应用程序时才会发生此异常。在本地运行它不会导致此异常。


1
阅读更新。 对我也有用。 - Bluebaron
2个回答

1

文档建议您在此情况下检查SocketException :: ErrorCode。那个值是多少?应该很有启发性。Family参数应该没问题,否则您会收到ArgumentException

如果收到SocketException,请使用SocketException :: ErrorCode获取特定的错误代码。一旦获得了此代码,您可以参考MSDN中的Windows Sockets版本2 API错误代码文档以获取详细的错误描述。


很遗憾,ErrorCode是10022(无效参数)。 - Mark
这非常令人困惑。UDP 在这台机器上总是失败,还是只有在 .Net 访问时才会出现问题? - Steve Townsend
UDP在其他方面运行良好。我已更新我的问题,包括它似乎只在从网络驱动器运行时发生。但是,它仍然限制在那台机器上。 - Mark
这可能是代码访问安全(CAS)的问题吗?您能否从该驱动器运行本地代码UDP客户端?无论如何,听起来这对您来说是一个可用的解决方法(即从本地磁盘运行)。您可以尝试在此处执行以下步骤,以赋予网络驱动器完全信任:http://www.hanselman.com/blog/GivingAMappedNetworkDriveFullTrustWithNETCodeAccessSecurity.aspx - Steve Townsend
似乎不是CAS问题,因为存在问题的机器只安装了.NET 4客户端框架,并且.NET 4不再需要用户给予网络驱动器完全信任。此外,CAS应该会导致SecurityException异常。感谢您的帮助,我相信这最终会变得简单! - Mark

0

0x80004005是访问被拒绝的错误,您没有创建套接字的权限,可能是防火墙的问题?

或者您的套接字正在使用中,您是否在终止套接字前关闭了程序?


该应用程序需要管理员权限,因此它应该可以访问创建套接字。同时也没有尝试绑定到端口,所以我不知道套接字如何被使用。感谢您的建议。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接