TcpClient и UdpClient выдают ошибки

В двух системах под управлением 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();


person Winter Faulk    schedule 11.02.2013    source источник
comment
Q: Пробовали ли вы использовать определенный номер порта (вместо InAddrAny)? ПРИМЕР: UdpClient udpClient = new UdpClient(11000); udpClient.Connect("www.myurl.com", 11000);   -  person paulsm4    schedule 11.02.2013
comment
О: Да, одинаковый результат на обеих системах.   -  person Winter Faulk    schedule 11.02.2013


Ответы (2)


Проблема заключалась в том, что мой код выполнялся из папки Dropbox, и по какой-то причине это вызывало проблемы, даже если Dropbox в то время не работал в системе. Если я переместил кодовую базу на рабочий стол и запустил ее, все работает.

Обновлять

Я провел еще несколько исследований и обнаружил, что проблема не в Dropbox, а в Cloudfogger, если я закрою Cloudfogger, все будет работать.

person Winter Faulk    schedule 11.02.2013
comment
И, конечно же, Cloudfogger шифрует файлы в вашей папке Dropbox. Вопрос. Либо перемещение ваших файлов из из Dropbox, либо отключение Cloudfogger решит проблему, верно? Обязательно примите ваш ответ, когда у вас будет шанс. - person paulsm4; 12.02.2013
comment
Да, удаление файлов или закрытие Cloudfogger решает проблему. - person Winter Faulk; 08.03.2013

Я вижу, что в вашем примере вы используете порт 123, что может быть плохим выбором, поскольку он попадает в зарезервированный диапазон, в частности 123 используется Протокол сетевого времени. Попробуйте использовать незарезервированные порты выше 1024.

Если вы все еще получаете сообщение об ошибке с

UdpClient client = new UdpClient();

я предполагаю, что есть проблема с вашей системой. Попробуйте запустить тот же исполняемый файл на другом компьютере, если можете.

person MarcF    schedule 11.02.2013
comment
Порт 123 — это порт, который я хотел бы использовать, потому что я пишу клиент/сервер NTP, но безуспешно пытался использовать порты в незарезервированном диапазоне. Я пробовал запускать один и тот же код на двух системах с одинаковым результатом на обеих. - person Winter Faulk; 11.02.2013
comment
@Sane - Не могли бы вы пройтись по своему коду и сказать мне, какие именно строки вызывают исключение (это не ясно из вашего поста)? - person MarcF; 11.02.2013
comment
UdpClient выдает исключение, или если я изменяю его на TcpClient, я получаю такое же исключение. Например, если я использую ваш приведенный выше код, я получаю исключение. - person Winter Faulk; 11.02.2013
comment
Хорошо, вы можете попробовать { UdpClient client = new UdpClient(); } catch (Исключение ex) { Console.WriteLine(ex.ToString()); } и вставьте строку ошибки в комментарии. - person MarcF; 11.02.2013
comment
System.Net.Sockets.SocketException (0x80004005): в System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType) указан недопустимый аргумент в System.Net.Sockets.UdpClient.createClientSocket() в GetNTPTime.Program.Main(String[] args) в Program.cs:строка 15 - person Winter Faulk; 11.02.2013
comment
В эфирной системе нет включенных брандмауэров. - person Winter Faulk; 11.02.2013
comment
Спасибо за помощь нашел мою проблему. - person Winter Faulk; 12.02.2013