从Windows服务运行TCPListener

时间:2018-11-12 22:44:12

标签: c# windows sockets service tcplistener

我试图创建一个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查看时,该端口上什么也看不到,并且无论将监听端口更改为什么,它似乎都会发生。异常发生在“服务器=新的TcpListener(IPAddress.Loopback,8889);”行上。

为什么会出现此错误?如何使它正常工作?

*编辑后注意到,我也曾尝试将其作为控制台应用程序使用,并且似乎可以正常运行,但只有在作为Windows服务运行时才会失败

0 个答案:

没有答案