【问题标题】:I want to create a program that checks ip address continuously我想创建一个连续检查 ip 地址的程序
【发布时间】:2014-07-20 22:31:15
【问题描述】:

我想创建一个连续检查 ip 地址的程序。

我有一个检查 IP 地址和端口的代码,如下所示:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;   
using System.Threading;
using System.IO;

namespace WinNetworkIOCS {
     public partial class Form1 : Form {
         public Form1() {
             InitializeComponent();
         }

         private void ConnectButton_Click(object sender, EventArgs e) {
             DisableFields();
             DoNetworkingConnection();
         }

         private void DisableFields() {
             PortBox.Enabled = false;
             IPAddressBox.Enabled = false;
             SendMessageBox.Enabled = false;
             ConnectButton.Enabled = false;
         }

         private void EnableFields() {
             PortBox.Enabled = true;
             IPAddressBox.Enabled = true;
             SendMessageBox.Enabled = true;
             ConnectButton.Enabled = true;
         }

         private void WriteToStatusBar(string Message) {
            //EnableFields();
            ThreadHelperClass.SetText(this, lblStatus, Message);
         }

         private void DoNetworkingConnection() {
            Thread MyThread = null;

            try {
               ThreadStart ThreadMethod = new ThreadStart(ConnectTo);
               MyThread = new Thread(ThreadMethod);
            } catch (Exception e) {
               WriteToStatusBar("Failed to create thread with error: " + e.Message);
               return;
            }

            try {
               MyThread.Start();
            } catch (Exception e) {
               WriteToStatusBar("The thread failed to start with error: " + e.Message);
            }
       }

       private void ConnectTo() {
          string ServerName = this.IPAddressBox.Text;
          int Port = System.Convert.ToInt32(this.PortBox.Text);

          WriteToStatusBar("IP Address: " + ServerName + "Port: " + Port);
          Socket ClientSocket = null;

          try {
             // Let's connect to a listening server
             try {
                ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                WriteToStatusBar("Socket is OK...");
            } catch (Exception e) {
                throw new Exception("Failed to create client Socket: " + e.Message);
            }

            IPEndPoint ServerEndPoint = new IPEndPoint(IPAddress.Parse(ServerName), Convert.ToInt16(Port));

            try {
                ClientSocket.Connect(ServerEndPoint);
                WriteToStatusBar("Connect() is OK...");
            } catch (Exception e) {
                throw new Exception("Failed to connect client Socket: " + e.Message);
            }
        } catch (Exception e) {
            WriteToStatusBar(e.Message);
            ClientSocket.Close();
            return;
        }

        // Let's create a network stream to communicate over the connected Socket.
        NetworkStream ClientNetworkStream = null;

        try {
            try {
                // Setup a network stream on the client Socket
                ClientNetworkStream = new NetworkStream(ClientSocket, true);
                WriteToStatusBar("Instantiating NetworkStream...");
            } catch (Exception e) {
                // We have to close the client socket here because the network
                // stream did not take ownership of the socket.
                ClientSocket.Close();
                throw new Exception("Failed to create a NetworkStream with error: " + e.Message);
            }

            StreamWriter ClientNetworkStreamWriter = null;

            try {
                // Setup a Stream Writer
                ClientNetworkStreamWriter = new StreamWriter(ClientNetworkStream);
                WriteToStatusBar("Setting up StreamWriter...");
            } catch (Exception e) {
                ClientNetworkStream.Close();
                throw new Exception("Failed to create a StreamWriter with error: " + e.Message);
            }

            try {
                ClientNetworkStreamWriter.Write(this.SendMessageBox.Text.ToString());
                ClientNetworkStreamWriter.Flush();
                WriteToStatusBar("We wrote " + this.SendMessageBox.Text.Length.ToString() + " character(s) to the server.");
            } catch (Exception e) {
                throw new Exception("Failed to write to client NetworkStream with error: " + e.Message);
            }
        } catch (Exception e) {
            WriteToStatusBar(e.Message);
        } finally {
            // Close the network stream once everything is done
            ClientNetworkStream.Close();
        }
    }

    delegate void SetTextCallback(string text);
}

问题是它没有连续检查ip地址和端口。 在我的代码中添加什么来实现这一点?

【问题讨论】:

  • 它到底在做什么,安迪?它检查一次吗?它在任何时候都会失败吗?产生异常?
  • 我试过了,但完全没有错误。我看到它只执行了一次,怎么做不止一次,实时的。

标签: winforms c#-5.0


【解决方案1】:

我假设您的意思是您希望能够多次运行您的程序,而不是您希望它一遍又一遍地检查,因此您的问题实际上是您的程序完成了ping 的任务,但从不允许您输入新信息?

这是因为在你的函数中

private void ConnectButton_Click(object sender, EventArgs e) {
             DisableFields();
             DoNetworkingConnection();
         }

您运行函数 DisableFields();和 DoNetworkingConnection();假设 DoNeworkingConnection();工作,它运行一次代码然后你的问题是你永远不会再次启用你的控件,因为在

     private void WriteToStatusBar(string Message) {
        //EnableFields();
        ThreadHelperClass.SetText(this, lblStatus, Message);
     }

您已注释掉 EnableFields();重新启用您的控件。如果不是这种情况,并且您实际上是在尝试使其连续运行,则必须将 ConnectTo() 的发送部分包装在一个 while 循环中

while(true)
{
ClientNetworkStreamWriter.Write(this.SendMessageBox.Text.ToString());
                ClientNetworkStreamWriter.Flush();
                WriteToStatusBar("We wrote " + this.SendMessageBox.Text.Length.ToString() + " character(s) to the server.");
}

如果是这种情况,请说明您要达到的目标,您可能会得到更好的解决方案,因为这很快就会变成类似 DOS 攻击的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2013-07-29
    相关资源
    最近更新 更多