检查我的ip与以前的ip相比是否唯一

本文关键字:ip 是否 唯一 我的 检查 | 更新日期: 2023-09-27 17:58:09

我做了一个简单的应用程序来检查我的ip。想法是:

1)如果我点击一个按钮,应用程序将检查我的ip并与以前的ips 进行比较

2)如果我的新ip和以前一样,什么都不做

3)如果我的新ip与以前不同,并且我以前从未使用过此ip,则递增unique并添加到dataGridRow1新行

4)如果我的新ip是我的默认ip增量my_ip

5)如果我的新ip与以前不同,但我在递增duplicate并添加到dataGridRow1新行之前已被分配到此ip

6)每个包含重复ip的dataGrid1 BackColor行都是红色的。如果它包含默认ip,它是绿色的

好的,让我们进入代码:

全局变量:

string old_ip = "";
string new_ip = "";
int new_row = 0;    //new added row position
int duplicate = 0;
int my_ip = 0;
int unique = 0;

延迟功能

public void MyDelad(int milliseconds)
{
    Stopwatch stopwatch = Stopwatch.StartNew();
    while (stopwatch.ElapsedMilliseconds <= (long)milliseconds)
    {
        Application.DoEvents();
    }
}

按钮点击事件

    MyDelad(500);
    while (true)    //force obtain new_ip
    {
        try
        {
            new_ip = new System.Net.WebClient().DownloadString("https://api.ipify.org");
        }
        catch
        {
            MyDelad(500);
            continue;
        }
        break;
    }
    if (old_ip != new_ip)   //compare old and new ip
    {
        unique++;
        dataGridView1.Rows.Add(new_ip);

        if (new_ip == "121.464.544.122")     //if new ip is my default
        {
            my_ip++;
            unique--; //if it's default ip instead of unique
            dataGridView1.Rows[new_row].Cells[0].Style.BackColor = System.Drawing.Color.Green;
        }
        else         //check every row if ip existed before
        {

            for (int x = 0; x < dataGridView1.Rows.Count - 2; x++)  //check from first to penultimate row
            {
                if (dataGridView1.Rows[x].Cells[0].Value.ToString() == new_ip.ToString())
                {
                   duplicate++;
                }
            }
        }
        new_row++;  //increment new added row position

    }
    old_ip = new_ip;

}

我的第一个问题是:我听说使用全局变量是错误的。但是,如果我在button_click事件中使用局部变量,它将在每次单击按钮后重置变量的值(例如存储unique值的变量)。那么我应该使用全局变量吗?

第二个问题:我可以用另一种方式存储unique值吗?现在它正在增加unique值,如果是old_ip != new_ip。如果是new_ip == '121.464.544.122',那么它将减去unique的值,因为这是我的默认值。

第三个问题:运行Button_Click事件时,如何避免"冻结"我的应用程序?。

第四个问题:你对如何改进我的代码有什么想法吗?也许将以前的ip存储在文本文件或数组中会更好?

检查我的ip与以前的ip相比是否唯一

只有一些指针。。。

对于数据,我只会创建一个简单的类,将变量作为属性。在您的表单中,您只能有一个类的实例。这个类还可以有一个Dictionary,其中包含您收集的所有ip地址(作为关键字)和找到它们的次数(作为值)。这也将使搜索更容易。

至于冷冻。。。您应该在一个单独的线程中执行点击事件的(阻塞)代码。然后,您也可以通过Application.DoEvents()调用忘记MyDelad()函数。当然,你需要牢记线程安全。。。