В десктопных редакциях Windows есть ограничение на максимальное количество одновременных сетевых подключений с других компьютеров. Так, например Window 10 и 11 (независимо от редакции) поддерживают только 20 одновременных сессий. Если компьютер с Windows 10/11 используется в качестве файлового сервера, или сервера печати, то при превышении лимита TCP/IP сессий, 21 пользователь при подключении получит ошибку:
No more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept.
Или:
Windows не удается подключиться к принтеру. Дополнительные подключения к этому удаленному компьютер сейчас невозможны, так как их число достигло предела.
В пользовательском лицензионном соглашении (EULA)Windows 10 указано, что к компьютеру смогут одновременно подключиться не более 20 устройств (CAL):
Подключение устройств. К программному обеспечению, установленному на лицензированном устройстве, могут иметь доступ до 20 других устройств в целях использования следующих функций программного обеспечения: файловых служб, служб печати, служб IIS и служб общего доступа к подключению Интернета, а также служб телефонии на лицензированном устройстве. Вы можете разрешить любому количеству устройств обращаться к программному обеспечению, установленному на лицензированном устройстве, для синхронизации данных между устройствами.
Таким образом Microsoft ограничивает возможно использования десктопных редакций Windows в качестве полноценного сервера. Если вам нужна поддержка большего количества клиентов, придется приобрести Windows Server (или перейти на samba)
Лимит на количество входящих сессий в Windows можно получить с помощью команды:
net config server
Текущий лимит:
Maximum Logged On Users 20
16777216
.
Также обратите внимание на значение параметра Idle session time (min)
. По умолчанию компьютер будет отключать сессии неактивные более 15 минут.
Если вы хотите более агрессивно отключать неактивные сессии (например, уменьшив таймаут неактивности до 5 минут), выполните:
net config server /autodisconnect:5
Также при превышении количества одновременных подключений, вы можете отключить некоторые устройства вручную. Вывести список активных сетевых подключений к компьютеру:
net session
Отключить все активные сессии с компьютера (или IP адреса):
net session \192.168.31.94 /d
Если при достижении максимального количества подключений вы хотите автоматически отключать определенных клиентов, можно воспользоваться PowerShell скриптом. Ниже приведен пример простого PowerShell скрипта, которые получает список активных сессий и при достижении 19 подключений, отключает 2 сессии с самыми большими таймаутами (но вы можете использовать свою логику).
_x000D_$number_of_old_sessions_to_kill=2_x000D_$output = net session | Select-String -Pattern \_x000D_$CurConns= ($output| Measure-Object -Line).Lines_x000D_if ($CurConns -ge 19) {_x000D_ $sessions = @()_x000D_ $output | foreach {_x000D_ $parts = $_ -split "s+", 4_x000D_ $session= New-Object -Type PSObject -Property @{_x000D_ Computer = $parts[0].ToString();_x000D_ Username = $parts[1];_x000D_ Opens = $parts[2];_x000D_ IdleTime = $parts[3];_x000D_ }_x000D_ $sessions += $session_x000D_ }_x000D_ $oldsessions=$sessions|Sort-Object -Property IdleTime -Descending | Select-Object -First $number_of_old_sessions_to_kill_x000D_ ForEach ($oldsession in $oldsessions) {_x000D_ net session $($oldsession.Computer) /d /y_x000D_ }_x000D_}_x000D_
Такой PowerShell скрипт можно запускать через планировщик Windows каждые n-минут, чтобы он отключал простаивающие сессии.
Для предыдущих версий Windows можно найти патчи для файла tcpip.sys, позволяющие отключить ограничение на количество сессий в десктопных редакциях Windows (по аналогии с библиотекой RDP Wrapper ). Но для Windows 10 и 11 таких патчей я не втречал. В любом случае их использование будет нарушением лицензионного соглашения.