当服务器联机或脱机时,如何使事物进行交互

时间:2017-01-25 08:37:17

标签: c# ping

所以我对c#非常新,有人让我让他成为一个Windows窗体应用程序,你可以看到,他们的服务器是在线还是离线。他想让我做一个鱼缸(服务器)游泳的水族馆,当他们在线时,当他们离线时,他们只是躺在水面上。但我不知道,谁将鱼类纳入我的代码:

 private static bool IsServer1Up(string hostName)
        {
            bool retVal = false;
            try
            {
                Ping pingSender = new Ping();
                PingOptions options = new PingOptions();
                options.DontFragment = true;
                string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                int timeout = 120;

                PingReply reply = pingSender.Send(hostName, timeout, buffer, options);
                if (reply.Status == IPStatus.Success)
                {
                    retVal = true;
                }
            }
            catch (Exception ex)
            {
                retVal = false;

            }
            return retVal;
        }

这就是我的想法。如果你能为我提供非常好的话

PS:对不起,如果我拼错了或有很多语法错误,我11岁,来自德国:D

1 个答案:

答案 0 :(得分:1)

我试着让你走上正确的道路。

首先,您需要一个代表您的服务器的类。这可能看起来像这样:

class Server
{
     public string HostName { get; private set; }
     public bool IsOnline { get; private set; }

     public Server(string hostName)
     {
        HostName = hostName;
     }

     public bool CheckState()
     {
        IsOnline = YourLogicForChecking(HostName);
        return IsOnline;
     }
}

在您的应用程序中,您需要初始化所有服务器的集合。假设你知道如何画你的鱼,你可以实现一个类似的方法。

public void DrawFish(Server s)
{
   /* your drawing logic, if server is offline the fish is dead, else it is alive */
}

然后你应该使用一个更新服务器状态的计时器,并调用每个服务器的绘图功能。以下是您的表单的示例。

public MainForm()
{
    InitializeComponent();

    Servers = LoadAllServers();
    timer.Interval = 1000;
    timer.Start();

    timer.Tick += Timer_Tick;

 }

 public void Timer_Tick(object sender, EventArgs e)
 {
      foreach(var s in Servers)
      {
         s.CheckState();
         DrawFish(s);
      }
 }