В десктопных редакциях 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 сессии с самыми большими таймаутами (но вы можете использовать свою логику).
$number_of_old_sessions_to_kill=2 $output = net session | Select-String -Pattern \\ $CurConns= ($output| Measure-Object -Line).Lines if ($CurConns -ge 19) { $sessions = @() $output | foreach { $parts = $_ -split "\s+", 4 $session= New-Object -Type PSObject -Property @{ Computer = $parts[0].ToString(); Username = $parts[1]; Opens = $parts[2]; IdleTime = $parts[3]; } $sessions += $session } $oldsessions=$sessions|Sort-Object -Property IdleTime -Descending | Select-Object -First $number_of_old_sessions_to_kill ForEach ($oldsession in $oldsessions) { net session $($oldsession.Computer) /d /y } }
Такой PowerShell скрипт можно запускать через планировщик Windows каждые n-минут, чтобы он отключал простаивающие сессии.
Для предыдущих версий Windows можно найти патчи для файла tcpip.sys, позволяющие отключить ограничение на количество сессий в десктопных редакциях Windows (по аналогии с библиотекой RDP Wrapper). Но для Windows 10 и 11 таких патчей я не втречал. В любом случае их использование будет нарушением лицензионного соглашения.