Запуск TCPListener из службы Windows - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать службу Windows, которая прослушивает определенный порт для входящего сериализованного объекта, а затем выполняет какое-то действие, однако при каждом запуске я получаю следующую ошибку:

System.Net.Sockets.SocketException (0x80004005): обычно допускается только одно использование каждого адреса сокета (протокол / сетевой адрес / порт)

Вот код, который работает:

 protected override void OnStart(string[] args)
        {
                Thread t = new Thread(Server.StartServer);
                t.Start();
        }

Метод StartServer выглядит следующим образом:

public static void StartServer()
    {
        TcpListener server = null;
        try
        {
            server = new TcpListener(IPAddress.Loopback, 8889);
            server.Start();
        }
        catch(Exception e)
        {
            //write to a log file and close
        }

        for (; ; )
        //Some more code that handles the serialization etc

Похоже, в сообщении говорится, что что-то еще уже прослушивает этот сокет, однако, когда я смотрю с использованием CMD и netstat -a, я ничего не вижу на этом порте, и кажется, что это происходит независимо от того, на что я меняю порт прослушивания. , Исключение возникает в строке «server = new TcpListener (IPAddress.Loopback, 8889);».

Почему возникает эта ошибка и как я могу заставить ее работать должным образом?

* Отредактировано, чтобы заметить, что я также пробовал это как консольное приложение, и оно, кажется, работает, оно не работает только при запуске в качестве службы Windows

...