Я обнаружил, что на моем компьютере с Windows 10 имеется несколько портов, которые (1) не используются каким-либо процессом и (2) я не могу прослушивать.
Я обнаружил эту проблемупытаясь запустить сервер узла, который использовал порт 3000. Я нашел ряд вопросов на эту тему. Это типично: Node.js Порт 3000 уже используется, но на самом деле это не так?
Все респонденты этого вопроса и аналогичные вопросы предлагают использовать "netstat -ano" длянайдите процесс, который использует порт и убивает его.
Я обнаружил, что заблокировано большое количество портов, которые не привязаны к процессам. Это не связано с AV или брандмауэром. Я выключил брандмауэр, и у меня есть только Защитник Windows AV.
Я написал программу для прослушивания портов от 3000 до 5000 включительно на 127.0.0.1.
int port = 3000;
while(port <= 5001)
{
try
{
ListenOnPort(port);
++port;
}
catch (Exception ex)
{
Console.WriteLine($"Listen on {port} failed: {ex.Message}");
++port;
}
}
Где находится ListenOnPort...
private static void ListenOnPort(int v)
{
var uri = new UriBuilder("http", "127.0.0.1", v);
HttpListener listener = new HttpListener();
listener.Prefixes.Add(uri.Uri.ToString());
Console.WriteLine($"Listening on {v}");
listener.TimeoutManager.IdleConnection = new TimeSpan(0, 0, 1);
listener.Start();
var task = listener.GetContextAsync();
if(task.Wait(new TimeSpan(0,0,1)))
{
HttpListenerResponse response = task.Result.Response;
// Construct a response.
string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
// Get a response stream and write the response to it.
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
// You must close the output stream.
output.Close();
}
listener.Stop();
}
Программа выдала вывод, подобный этому ...
Listening on 3000
Listen on 3000 failed: The process cannot access the file because it is being used by another process
Listening on 3001
Listen on 3001 failed: The process cannot access the file because it is being used by another process
Listening on 3002
Listen on 3002 failed: The process cannot access the file because it is being used by another process
Listening on 3003
Listen on 3003 failed: The process cannot access the file because it is being used by another process
Listening on 3004
Listen on 3004 failed: The process cannot access the file because it is being used by another process
Listening on 3005
Listen on 3005 failed: The process cannot access the file because it is being used by another process
Listening on 3006
Listening on 3007
Listening on 3008
Listening on 3009
Listening on 3010
Я обнаружил, что между диапазонами 3000 и 5000 существует 624 порта, которыезаблокирован. Между тем "netstat -ano" показывает, что в этом диапазоне используется ровно 5 портов. Так что же блокирует 619 других портов?