在运行Windows 7 x64和VS2012 U1并使用.Net 4的两个系统上,如果我调用UdpClient或TcpClient,我会收到错误“提供了无效参数”。
我尝试过多个端口,并且我已经验证端口尚未绑定,但每次都会出现相同的错误。
我也尝试使用提升的权限运行代码无济于事。
测试代码:
try
{
using (UdpClient client = new UdpClient(new IPEndPoint(IPAddress.Any, 123)))
{
Console.WriteLine("Port is open");
}
}
catch (SocketException error)
{
Console.WriteLine("Error:\n{0}", error.Message);
}
错误输出:
System.Net.Sockets.SocketException was unhandled
HResult=-2147467259
Message=An invalid argument was supplied
Source=System
ErrorCode=10022
NativeErrorCode=10022
StackTrace:
at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
at System.Net.Sockets.UdpClient..ctor(IPEndPoint localEP)
at GetNTPTime.Program.Main(String[] args) in z:\My Documents\Dropbox\Dev\C#\_Example\GetNTPTime\GetNTPTime\Program.cs:line 15
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
作为一个注释,如果我只是调用 UdpClient client = new UdpClient();
,我会得到同样的错误答案 0 :(得分:2)
问题是我的代码是从Dropbox文件夹执行的,并且由于某种原因导致问题,即使Dropbox当时没有在系统上运行。如果我将代码库移动到桌面并运行它,一切正常。
我做了一些更多的研究,我发现Dropbox不是导致问题,而是Cloudfogger,如果我关闭Cloudfogger一切正常。
答案 1 :(得分:0)
我在你的例子中看到你使用端口123,这可能是一个不好的选择,因为它属于保留范围,特别是Network Time Protocol使用了123。尝试使用1024以上的非保留端口。
如果仍然出现
错误UdpClient client = new UdpClient();
我猜您的系统存在问题。如果可以的话,尝试在不同的机器上运行相同的可执行文件。