未处理的& # 39;FormatException& # 39;拆分IP字节时的异常

本文关键字:异常 字节 拆分 未处理 FormatException IP | 更新日期: 2023-09-27 18:14:47

我试图从用户输入的IP地址中分离八位元组,然后将这些八位元组放入文本文档中。问题是,我得到一个"FormatException未处理"的警告。我是编程新手,所以我不太确定如何解决这个问题。

下面是用户输入的示例:123.456.789

下面是我的代码:

string fwrEdcgIp;
fwrEdcgIp = EDCGIPAddressFwrTxt.Text;
//Separate out EDCG IP Foreward octet
string[] edipf = fwrEdcgIp.Split('.');
int fwrEdcgIp1 = Int32.Parse(edipf[0]);
int fwrEdcgIp2 = Int32.Parse(edipf[1]);
int fwrEdcgIp3 = Int32.Parse(edipf[2]);
int fwrEdcgIp4 = Int32.Parse(edipf[3]);

未处理的& # 39;FormatException& # 39;拆分IP字节时的异常

如何使用真正的IP地址解析器(System.Net.IPAddress)?

IPAddress ipAddr;
bool ok = IPAddress.TryParse(EDCGIPAddressFwrTxt.Text, out ipAddr);
if (ok)
{
    byte[] bytes = ipAddr.GetAddressBytes();
}

很可能edipf中的某个字符串不是有效的整数。也许用户输入了错误的内容。当抛出异常时,应该给你'break'选项,并查看导致问题的行,看看问题是什么。如果edipf[x]是畸形的,那么这是你的问题。

我将使用try/catch块捕获此异常并通知用户输入正确的格式。(实际上我会使用I4V的解决方案,如果!ok,通知用户用户提供的不正确格式,但知道这一点仍然很重要。)

string fwrEdcgIp;
fwrEdcgIp = EDCGIPAddressFwrTxt.Text;
//Separate out EDCG IP Foreward octet
string[] edipf = fwrEdcgIp.Split('.');
try {
    int fwrEdcgIp1 = Int32.Parse(edipf[0]);
    int fwrEdcgIp2 = Int32.Parse(edipf[1]);
    int fwrEdcgIp3 = Int32.Parse(edipf[2]);
    int fwrEdcgIp4 = Int32.Parse(edipf[3]);
} catch (FormatException) {
    MessageBox.Show("Please input IP address in the format "123.123.123.123");
}

根据设计,如果输入不是有效整数,Int32.Parse将抛出FormatException。它还能做什么?

使用Int32.TryParse代替用户输入。

使用TryParse。

int num;
bool result = Int32.TryParse(value, out num);
if(result){
   // do something.
}