1

Windows 7x64とVS2012U1を実行し、.Net 4を使用している2つのシステムで、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();を呼び出すと、同じエラーが発生します。

4

2 に答える 2

2

問題は、コードが Dropbox フォルダから実行されていたことであり、その時点で Dropbox がシステム上で実行されていなくても、何らかの理由で問題が発生していました。コードベースをデスクトップに移動して実行すると、すべてが機能します。

アップデート

さらに調査を行ったところ、問題の原因は Dropbox ではなく、Cloudfogger であることがわかりました。Cloudfogger を閉じると、すべてが機能します。

于 2013-02-11T20:03:44.933 に答える
0

あなたの例ではポート 123 を使用していますが、予約された範囲内にあるため、これは悪い選択である可能性があります。特に、123 はNetwork Time Protocolによって使用されます。1024 を超える予約されていないポートを使用してみてください。

それでもエラーが発生する場合

UdpClient client = new UdpClient();

あなたのシステムに問題があると思います。可能であれば、別のマシンで同じ実行可能ファイルを実行してみてください。

于 2013-02-11T19:13:20.513 に答える