将代码作为应用程序运行与作为服务运行时打开TCP/IP端口的任何区别
本文关键字:IP 任何 区别 TCP 运行 应用程序 代码 服务 运行时 | 更新日期: 2023-09-27 18:00:38
我正在创建一个服务,该服务将打开一个侦听TCP/IP端口(使用一种称为DNP的协议)。
为了调试程序,我在program.cs文件中使用了以下代码:
static void Main()
{
#if(!DEBUG)
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ServerDNP()
};
ServiceBase.Run(ServicesToRun);
#else
ServerDNP ServerDNPProcess = new ServerDNP();
ServerDNPProcess.MainProcess();
#endif
}
我的OnStart看起来像这样:
protected override void OnStart(string[] args)
{
this.workerThread = new Thread(new ThreadStart(this.MainProcess));
this.keepRunning = true;
this.workerThread.Start();
}
在实际过程中,我会向日志文件输出大量信息,无论我是否将其作为DEBUG运行,还是将输出释放到该文件,看起来都是一样的。
当我将其作为DEBUG运行时,TCP/IP端口打开时没有问题,我可以从远程机器与它通信。但是,当我将其作为服务运行时,我在远程机器上不断收到"套接字上没有活动"的错误。
为了让服务打开TCP/IP端口,我需要为它做什么特别的事情吗?我已经找了一段时间了,什么都想不出来。
我只是个白痴。
我没有意识到我需要为这个过程打开防火墙,而不仅仅是在我作为应用程序运行它的时候。