Ошибка определения принадлежности клиентского и серверного процессов одному компьютеру
В начале будет рассмотрено создание элементарного клиент-сервера, для усвоения базовых знаний, на основе которых будет строиться многопоточная архитектура.
— Потоки: для того чтобы не перепутать что именно подразумевается под потоком я буду использовать существующий в профессиональной литературе синоним — нить, чтобы не путать Stream и Thread, всё-таки более профессионально выражаться — нить, говоря про Thread.
— Сокеты(Sockets): данное понятие тоже не однозначно, поскольку в какой-то момент сервер выполняет — клиентские действия, а клиент — серверные. Поэтому я разделил понятие серверного сокета — (ServerSocket) и сокета (Socket) через который практически осуществляется общение, его будем называть сокет общения, чтобы было понятно о чём речь.
Спасибо за подсказку про Thread.sleep();!
Конечно в реальном коде Thread.sleep(); устанавливать не нужно — это моветон! В данной публикации я его использую только для того чтобы выполнение программы было нагляднее, что бы успевать разобраться в происходящем.
Так что тестируйте, изучайте и в своём коде никогда не используйте Thread.sleep();!
1) Однопоточный элементарный сервер.
2) Клиент.
3) Многопоточный сервер – сам по себе этот сервер не участвует в общении напрямую, а лишь является фабрикой однонитевых делегатов(делегированных для ведения диалога с клиентами серверов) для общения с вновь подключившимися клиентами, которые закрываются после окончания общения с клиентом.
4) Имитация множественного обращения клиентов к серверу.
Итак, начнём с изучения структуры однопоточного сервер, который может принять только одного клиента для диалога. Код приводимый ниже необходимо запускать в своей IDE в этом идея всей статьи. Предлагаю все детали уяснить из подробно задокументированного кода ниже:
Сервер запущен и находится в блокирующем ожидании server.accept(); обращения к нему с запросом на подключение. Теперь можно подключаться клиенту, напишем код клиента и запустим его. Клиент работает когда пользователь вводит что-либо в его консоли (внимание! в данном случае сервер и клиент запускаются на одном компьютере с локальным адресом — localhost, поэтому при вводе строк, которые должен отправлять клиент не забудьте убедиться, что вы переключились в рабочую консоль клиента!).
После ввода строки в консоль клиента и нажатия enter строка проверяется не ввёл ли клиент кодовое слово для окончания общения дальше отправляется серверу, где он читает её и то же проверяет на наличие кодового слова выхода. Оба и клиент и сервер получив кодовое слово закрывают ресурсы после предварительных приготовлений и завершают свою работу.
Посмотрим как это выглядит в коде:
А что если к серверу хочет подключиться ещё один клиент!? Ведь описанный выше сервер либо находится в ожидании подключения одного клиента, либо общается с ним до завершения соединения, что делать остальным клиентам? Для такого случая нужно создать фабрику которая будет создавать описанных выше серверов при подключении к сокету новых клиентов и не дожидаясь пока делегированный подсервер закончит диалог с клиентом откроет accept() в ожидании следующего клиента. Но чтобы на серверной машине хватило ресурсов для общения со множеством клиентов нужно ограничить количество возможных подключений. Фабрика будет выдавать немного модифицированный вариант предыдущего сервера(модификация будет касаться того что класс сервера для фабрики будет имплементировать интерфейс — Runnable для возможности его использования в пуле нитей — ExecutorServices). Давайте создадим такую серверную фабрику и ознакомимся с подробным описанием её работы в коде:
- Модифицированный Runnable сервер для запуска из предыдущего кода:
- 4) Имитация множественного обращения клиентов к серверу.
Как видно из предыдущего кода фабрика запускает — TestRunnableClientTester() клиентов, напишем для них код и после этого запустим саму фабрику, чтобы ей было кого исполнять в своём пуле:
Запускайте, вносите изменения в код, только так на самом деле можно понять работу этой структуры.
При поиске в ошибках платформы 8.3.4 находим следующее:
10118349 Клиентский и серверный процессы одного компьютера
Проблема:
В клиент-серверном варианте информационной базы после изменения конфигурации сети на серверном или клиентском компьютере, например, после появления на компьютере новых локальных IP-адресов, может происходить ошибка
Ошибка определения принадлежности клиентского и серверного процессов одному компьютеру.
Дата публикации:
2013-10-17
Исправления для удаленного компьютера требует проверки подлинности на уровне сети
Временное отключение антивируса и брандмауэра PC
В некоторых случаях антивирус и брандмауэр могут блокировать работу PC. Рекомендуем временно отключить (деактивировать) их с целью проверить, что они не являются причиной возникшей проблемы с IP-адресом сайта.
Как изменить RDP Порт
- Открываем редактор реестра regedit
- Открываем ветку HKEY_LOCAL_MACHINESystemCurrentControlSetControlTerminalServerWinStationsRDP-Tcp
- Правим параметр PortNumber в десятичном фрмате
- Порт RDP по умолчанию 3389
- Перезагружаем сервер
В интернете можно встретить и другие варианты решений, какие подойдут именно вам – надо проверять.
- Если у вас на удаленном сервере установлен КриптоПРО, он может быть источником проблем с rdp подключением. Попробуйте отключить проверку контрольных целостности файлов (проверки контрольных сумм) в КриптоПро через реестр. Перейдите в ветку реестра HKLMSYSTEMCurrentControlSetControlSession ManagerCProIntegrity и измените значение параметра CheckMode на 0. Перезагрузите сервер.
- Если в журнале событий TerminalServices-RemoteConnectionManager вы встретите событие с EventID 1057 (The RD Session Host Server has failed to create a new self signed certificate to be used for RD Session Host Server authentication on SSL connections), перейдите в каталог C:ProgramDataMicrosoftCryptoRSA, переименуйте папку Machinekeys в Machinekeys_bak и перезапустите службу TermService.
- Также нашел информацию, что RDP проблема “Произошла внутренняя ошибка” встречалась в Windows 10 1809, если на удаленном компьютере включена политика Configure H.264/AVC hardware encoding for Remote Desktop connections (находится в секции GPO: Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Remote Session Environment). Для решения этой проблемы достаточно отключить UDP протокол для RDP, создав в ветке реестра HKLMSOFTWAREPoliciesMicrosoftWindows NTTerminal ServicesClient параметр fClientDisableUDP со значением 1.
Пользователи windows 10 иногда сталкиваются с “Внутренней ошибкой” при подключении к RDP еще и из-за обновлений безопасности. В редких случаях, вместо ошибки “Ошибка RDP подключения CredSSP encryption oracle remediation” – пользователи могут получать “внутренняя ошибка подключения”. Если ни один из приведенных выше способов не помог – попробуйте решения описанные в статье RPD: ошибка подключения CredSSP encryption oracle remediation
Ошибка соединения с сервером 1С:Предприятие 8
После переименования сервера Windows Server 2008 с установленным 1С:Предприятие 8.3, если подключаться к серверу 1С:Предприятие 8.3 через консоль серверов, то возникает ошибка типа:
Ошибка соединения с сервером 1С:Предприятие 8.3 server_addr=tcp://SERVER:1540 descr=Ошибка сетевого доступа к серверу (Windows Sockets — 10061(0x0000274D). Подключение не установлено, т.к. конечный компьютер отверг запрос на соединение.) line=590 file=.\Src\DataExchangeTcpClientItmpl.cppНастройки кластера серверов 1С:Предприятие хранятся в каталоге srvinfo.
В этом каталоге хранится имя кластера и его настройки(в том числе безопасность) и списки информационных баз, подключенных к этому кластеру и их настройки.
Это два файла: srvinfo\srvribrg.lst и srvinfo\reg_1541\1CV8Reg.lst. В этих настроечных файлах и осталось старое имя сервера.
Откройте их в блокноте и замените на новое имя и запустите сервер 1С:Предприятие 8.Качественная, интересная, яркая и оригинальная фотография.
Не совсем понятно как у вас все настроено и как вы обращаетесь к серверу.
К серверу нужно подключаться по его имени, только по имени, никаких IP адресов. и все должно работать, а уж в докере он или нет особого значения не имеет.
Опишите подробнее ваши настройки.Хостовая система - windows 10. Сервер 1c запущен в докере. контейнер докера основан на ubuntu 14.04. Консоль администрирования серверов установлена на хостовой windows, из нее я и пытаюсь подключиться к серверу. Контейнер докер запущен с параметром "-h db", это имя хоста, т.е. внутри он пингуется по этому имени. В хостовой системе докер создал виртуальный ethernet интерфейс для NAT. пинг по адресу контейнера из хоста проходит нормально. Порты проброшены из докера в хост, это видно через netstat -a.
Что еще рассказать?Сервер 1с в контейнере имеет имя "db", адрес на 172.ххх, его дает виртуальный интерфейс докера.
В хостовой windows 10 я этот сервер прописывал в \etc\hosts со разными ip, которые там только доступны, например с ip докера - пинг не идет, ip хоста - пинг идет.
Если я правильно понимаю, нужно копать в сторону NAT докера? Оттуда (из контейнера) сеть работает, т.к. я пробовал пинговать яндекс, и это был успешно. А вот внутрь, получается, меня не пускает.
Сейчас на компе еще установлены VMWare и VirtualBox, соответственно и их виртуальные сетки тоже. Буду пробовать на чистой установке.При чем тут хостовая виндовс и что за разные адреса?
На компьютере, с которого вы подключаете к серверу нужно чтобы имя сервера резольвилось в IP адрес, по которому доступен сервер 1с. Каким образом вы это организуете - записав в hosts или подняв DNS сервер, не важно.
Если сервер за NAT'ом тогда должен быть проброс портов настроен. Порты менеджера 1541, агента 1540, рабочих процессов 1560-1591. Но вот вам зачем лепить NAT в докере, я честно говоря не понимаю.Вообще-то у меня вопрос про сервер 1С в докере.
Как достучаться из одной винды с клиентом до другой с сервером я знаю и такой ошибки, кстати, никогда не ловил. А вот с докером возникли проблемы.разные ip - здесь я имел в виду то, что указывал имя сервера 1С в контейнере "db" и все возможные адреса в системе - адрес реальной сетевой карты, адрес виртуальной карты докера, локалхост, адрес самого контейнера
Николай: А зачем такое делать?
Указывать нужно тот адрес на котором "висит" сервер 1с и никакой другой. Но этот адрес должен быть доступен разумеется с того места откуда вы подключаетесь. Т.е на него должен быть маршрут, он не должен быть за натом.
Если адрес за натом, тогда указывается адрес хоста который натит, и на котором настроен проброс портов.Т.е вам нужно сделать три вещи-
1)Четко определить по какому именно IP адресу у вас доступен сервер.
2)Прописать этот адрес в хостс того компьютера с которого будете подключаться к серверу.
3)Проверить что по имени сервера пингуется нужный адрес. Подключаться нужно обязательно по имени, но никак не по IP адресу.ошибка определения принадлежности клиентского и серверного процессов одному компьютеру
1С сервер стоит на хостовой машине.
На ней же стоит терминал, с которым люди нормально работают.
Была сделана виртуалка, на которой установили клиента 1С и пытаемся подключиться к хостовой машине, к базе на ней.
В ответ получаем сабж:(ipv6 отключен, файл hosts поправлен, сервер 1С перезапущен и переустановлен, кэш почищен.
Сейчас стоит 8.3.12.1616. На более ранних тоже самое:(Кто сталкивался с таким? Есть еще способы побороть это?
В подключении базы надо писать именно Имя хостового компьютера с сервером 1С, как его указали в файле hosts
Если писать ip адрес, то ошибка сохраняется
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
Ошибка определения принадлежности клиентского и серверного процессов одному компьютеру
Ошибка определения принадлежности клиентского и серверного процессов одному компьютеру — подобная ошибка наблюдается при использовании MS SQL server 2012 и платформы 1С 8.3.2.163. Возможно, так же проявляется на более ранних версиях.
Подобная ошибка может возникать при попытке открыть консоль серверов или открытии серверной базы.
Один из возможных вариантов исправления:1. Нужно найти файл hosts в папке C:\\Windows\\System32\\drivers\\etc Если в этой папке Вы не видите файл hosts, значит он просто скрыт. Тогда можно нажать клавишу ALT и, в появившемся меню, выбрать «Сервис»-«Параметры папок»-«Вид» и снять там галочку «Скрывать защищенные системные файлы». Можно еще установить переключатель «Показывать скрытые файлы, папки, диски», тогда вообще все будет видно. (После манипуляций с Hosts, рекомендуется вернуть галочку на ее прежнее место, что бы случайно чего не зацепить в будущем)
2. Открыть этот файл в wordpad и в конец дописать строку вида:
192.168.0.1 Server
указав данные своего сервера (IPадрес ИмяПК).Сохранить и закрыть файл.
3. Попробовать заново пропинговать свой ПК через имя. Если Вы снова не видите нужно IP — что-то пошло не так… Возможно антивирус вернул старую версию файла (Каспер такое любит) или что-то еще.
Задача состоит в том чтобы добиться правильного адреса при пинге через имя.
Перезапуск служб
В Windows есть много служб, без которых подключение к интернету работать не может. И если хоть одна из этих служб начинает работать неправильно, появляются разные ошибки. В том числе «Удаленное устройство или ресурс не принимает подключение». Нам нужно выполнить перезапуск двух служб: «DHCP-клиент» и «DNS-клиент».
- Открываем поиск (меню Пуск) , пишем «службы» и запускаем это приложение.
- Дальше находим службу «DHCP-клиент», нажимаем на нее правой кнопкой мыши и выбираем «Перезапустить».
- Находим службу DNS-клиент и делаем то же самое.
Решение 3. Используйте редактор групповой политики
Редактор групповой политики — это мощный инструмент, который может помочь вам настроить многие важные параметры Windows без необходимости редактирования реестра. Отключение NLA с помощью редактора групповой политики может быть очень полезным, особенно если вы отключаете все файлы. Выполните следующие действия, чтобы отключить ‘аутентификация на уровне сети удаленного рабочего столаС помощью редактора локальной групповой политики.
- Открыть Бегать диалог, нажав Win + R.
- Тип gpedit.msc и нажмите Войти запустить редактор локальной групповой политики.
- Перейдите по следующему пути, чтобы получить доступ к соответствующему файлу настроек:
Конфигурация компьютера >Административные шаблоны >Компоненты Windows >Службы удаленных рабочих столов >Узел сеансов удаленных рабочих столов >Безопасность - В разделе «Настройки безопасности» на правой панели найдите следующую запись:
Требовать аутентификацию пользователя для удаленных подключений с использованием аутентификации на уровне сети - Дважды щелкните эту запись, чтобы изменить значение.
- Нажмите на Отключено переключатель.
Проверьте, была ли ошибка устранена на вашем устройстве, попытавшись подключиться к удаленному рабочему столу с помощью отключенного NLA.
Решение 2. Используйте PowerShell
Один из самых простых способов отключения NLA состоит в использовании команд PowerShell для выполнения желаемого действия. PowerShell позволяет вам подключиться к удаленному компьютеру и после нацеливания на компьютер выполнить команду для отключения NLA.
- Откройте окно PowerShell с повышенными правами. Для этого используйте Win + S чтобы открыть диалоговое окно поиска, введите PowerShell, щелкните правой кнопкой мыши по результату и выберите Запустить от имени администратора.
- Выполните следующую команду, чтобы подключиться к целевому компьютеру:
$ TargetMachine = «Target-Machine-Name»
Заметка: Замените Target-Machine-Name на имя вашего компьютера - Введите следующую команду, чтобы удалить аутентификацию с сетевого компьютера:
(Get-WmiObject -class «Win32_TSGeneralSetting» -Namespace root cimv2 Terminalservices -ComputerName $ TargetMachine -Filter «TerminalName =’ RDP-tcp ’»). SetUserAuthenticationRequired (0)
Как решить проблему при использовании прокси
Поиск решения проблемы “Проверьте настройки прокси-сервера и брандмауэра” зависит от того, выходит юзер в сеть через proxy или нет. По функциональным особенностям промежуточные серверы можно разделить на две разновидности: веб-серверы и приложения, установленные на ПК. Если подключение производится через приложение (Kerio или Squid), то нужно проверить, не сбились ли настройки. В случае выхода в сеть при помощи удаленных прокси-ресурсов есть два варианта решения проблемы:
- просмотреть перечень доступных серверов-посредников;
- убедиться, что порт прокси в данный момент не занят другой задачей, в результате чего служба временно блокируется.
Решение 4. Используйте редактор реестра
Вы также можете использовать реестр для решения theудаленный компьютер требует проверки подлинности на уровне сетиОшибка в вашей сетевой системе. Выполните следующие шаги, чтобы решить ошибка аутентификации удаленного рабочего стола на вашем удаленном рабочем столе.
Замечания: Реестр является одним из самых мощных и важных инструментов в Windows, и внесение любых изменений без знания последствий может привести к поломке устройства. Обязательно подготовьте резервную копию, прежде чем вносить какие-либо изменения в ваше устройство, и точно следуйте приведенным инструкциям.
- Откройте диалоговое окно «Выполнить», нажав Win + R.
- Тип смерзаться и нажмите Войти запустить редактор реестра. Нажмите на да в приглашении контроля учетной записи пользователя.
- Перейдите в следующую папку, вставив путь в адресную строку редактора реестра:
Компьютер HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Lsa - На правой панели найдите и дважды щелкните Пакеты безопасности многострочное значение для изменения значения.
- В поле данных значения для записи введите tspkg и нажмите Ok.
- Далее перейдите к следующему разделу реестра:
Компьютер HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control SecurityProviders - На правой панели дважды щелкните, чтобы изменить значение SecurityProviders строковое значение.
- В поле Значение для записи введите credssp.dll и нажмите Ok.
Теперь проверьте, если проверка подлинности на уровне сети ошибка устранена на вашем устройстве.
Решение
Например наш сервер называется SERVER_1C, а его IP-адрес 192.168.1.22, то файл будет выглядеть так:
То же самое случилось на платформе 8.3.5, значит ошибку не исправили.
Помог перезапуск сервисов rphost, ragent и rmngr.
Спасибо за информацию!Алексей, видимо не исправили, но после обновления на 8.3.5 ошибки не получал. Может сеть успокоилась)
Может быть, но больше склоняюсь к проблеме платформы, уж очень она капризная ко всякого рода окружению.
От версии к версии разработчики не только копируют ошибки, но и создают новые.
Им нужно на что то жить, сделай все нормально ИТС продаваться не будет и сторонние програмисты от голода умрут.
У 1С весь бизнес построен на создании и борьбе с собственными ошибкамиНеобходимо в файл C:\Windows\System32\Drivers\etc\hosts добавить две строки
IP-адрес ИмяСервера
127.0.0.1 localhostвместо IP-адрес и ИмяСервера — данные вашего сервера (напр. 192.168.1.22 SERVER)
Константин, спасибо. Добавил как вариант решения.
Добавлю от себя. Ошибка иногда имеет немного другие симптомы, смотрите здесь . В той же теме указывается корень проблемы, а именно: «Задача состоит в том, чтобы добиться правильного адреса при пинге через имя».
Четыре часа бился с этой проблемой, и благодаря из последнему утверждению обнаружил, что ping сервера по имени с самого сервера выдается в формате ipv6. Т.е. комнада ping myserver из сети выдавала ipv4 ответы, а на самом myserver выдавала ipv6.
Решение. Отключение ipv6 в настройках адаптера мало. Необходимо полное отключение . Внизу страницы описана ручная инструкция, для тех кто не хочется качать майкрософтовский установщик, суть в изменении одного параметра реестра.
Надеюсь, своим постом сэкономлю время кому-нибудь.
UPD. 2015-07-24. Комментарий изменен Guesto. Закрыты теги)
Пардон теги не закрыл, а предпросмотра у вас нет
Роман, спасибо за полезный комментарий. На досуге ознакомлюсь и добавлю в статью как update.
Теги поправлю)та же проблема, вариант с файлом hosts не помог, проблема решилась отключением IPv6
Роман, благодарю, решило мою проблему. Была еще при создании базы на postgreSQL похожая проблема. Тоже был конфликт с IPv6(но решил другим способом, добавлением правила в pg_hba). Но я так думаю и это подойдет.
Решение 1. Измените настройки удаленного рабочего стола
- Открыть Бегать диалог, нажав Win + R.
- Тип sysdm.cpl и нажмите Войти запустить окно свойств системы.
- Перейти к Удаленный
- В подразделе «Удаленный рабочий стол» снимите флажок рядом с ‘Разрешить подключения только с компьютеров, на которых работает удаленный рабочий стол с проверкой подлинности на уровне сети (рекомендуется)»
- Нажмите на Подать заявление с последующим Ok.
- Перезагрузите вашу систему.
Теперь проверьте, можете ли вы подключиться к удаленному компьютеру, если этот параметр отключен. Это должно устранить ошибку на вашем устройстве. Есть несколько других способов отключить проверка подлинности на уровне сети в вашей системе.
Читайте также: