首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows服务应该使用哪个网络编程类?

Windows服务应该使用哪个网络编程类?
EN

Stack Overflow用户
提问于 2020-03-11 18:37:48
回答 2查看 78关注 0票数 0

我有一个运行一些任务的Windows服务。我需要在它的任务列表中添加一些网络功能。

以下是网络逻辑的样子:

代码语言:javascript
复制
+-------------------+                                                  +---------------+
|                   |                                    send request  |               |
|                   |                                   for some data  |               |
|                   |  <---------------------------------------------  |               |
|                   |                                                  |               |
|                   |  process request                                 |    Client     |
|  Windows Service  |                                                  |  Application  |
|                   |  send response                                   |               |
|                   |  --------------------------------------------->  |               |
|                   |                                                  |               |
|                   |                                process response  |               |
+-------------------+                                                  +---------------+

注意:可以有多个客户端应用程序同时请求数据。

注意:每个客户端应用程序可以同时发送多个数据请求。

注意: Windows服务和客户端应用程序可以驻留在同一个网络中,也可以驻留在不同的网络上。

下面是Windows服务的基本布局:

代码语言:javascript
复制
class Processor : System.ServiceProcess.ServiceBase
{
    private System.Timers.Timer Timer1 = null;
    private System.Timers.Timer Timer2 = null;
    private System.Timers.Timer Timer3 = null;

    protected override void OnStart(string[] args)
    {
        Timer1 = new System.Timers.Timer();
        Timer1.Interval = ...;
        Timer1.AutoReset = true;
        Timer1.Elapsed += new ElapsedEventHandler(...);
        Timer1.Start();

        Timer2 = new System.Timers.Timer();
        Timer2.Interval = ...;
        Timer2.AutoReset = true;
        Timer2.Elapsed += new ElapsedEventHandler(...);
        Timer2.Start();

        Timer3 = new System.Timers.Timer();
        Timer3.Interval = ...;
        Timer3.AutoReset = true;
        Timer3.Elapsed += new ElapsedEventHandler(...);
        Timer3.Start();

        // I was thinking of creating a new Task (System.Threading.Tasks.Task) or Timer (System.Timers.Timer) here to handle the networking-related logic.
    }

    protected override void OnStop()
    {
        Timer1.Stop();
        Timer1.Close();

        Timer2.Stop();
        Timer2.Close();

        Timer3.Stop();
        Timer3.Close();
    }
}

我一直在阅读微软的网络编程文档,但我仍然不知道哪一门课最适合我的情况。

我一直在考虑使用的课程是:

TcpListener和TcpClient类是套接字类的包装器。它们似乎隐藏了许多实现细节,使代码更容易理解。套接字类提供了大量的功能,但它可以处理多客户端连接。TcpListener能够处理多个客户端,还是只能在一个时间侦听一个客户端?

什么样的社交课最适合我的情况?我如何保证请求将得到响应的方式,同时也保证非网络相关的任务将继续而不被阻止?

EN

回答 2

Stack Overflow用户

发布于 2020-03-11 19:09:36

注意: Windows服务和客户端应用程序可以驻留在同一个网络中,也可以驻留在不同的网络上。

至少在这里我可以给你一个半好的答案。网络类不关心另一端是在同一台计算机上,还是在同一个交换机上,还是在旅行者2探测器上。如果它对本地主机有效,通常是网络管理员的任务,以确保有一条路径。

获得跨网络可达的服务--特别是在互联网上,直接进入服务器托管。Wich与编程是完全不同的话题。根据环境的实际情况,必要的更改可以从“无”更改到“服务器设计的总体更改”。但是,它应该更多地放在“无”方面,因为这是服务器管理员的工作,以确保服务器是可访问的。

票数 1
EN

Stack Overflow用户

发布于 2020-03-13 15:59:30

我做了些调查我错了。TcpListener类可以一次处理多个挂起的客户端连接

因为消息应该很小,所以与HTTP相关的类看起来有点过火了。

由于我的需求相对简单,而且我宁愿坚持更简单的设计,所以我将使用TcpListener和TcpClient类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60642541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档