0

私は小さな C# プロジェクトに取り組んでいますが、文字列をIPAddress. コードは次のとおりです。

Ping pingeage = new Ping();
String ip = tabtempsoctets1[0] 
    + "." + tabtempsoctets1[1] 
    + "." + tabtempsoctets1[2] 
    + "." + tabtempsoctets1[3];
MessageBox.Show(ip);
IPAddress adresseTest = IPAddress.Parse(ip);
boxLogs.Text = adresseTest.ToString();
PingReply reponse = pingeage.Send(adresseTest,2000);

しかし、VisualStudio は例外を発生させ、 myIpAddressIPAddress. なんで? tabtempoctets1は文字列の配列で、"." What's wrong in here? を手動で追加しました。

4

3 に答える 3

4

先頭または末尾にスペースがある可能性があります。"127.1.1.1"それ以外の場合は、 tryを正常に解析する必要があります。

IPAddress adresseTest = IPAddress.Parse(ip.Trim());

IPAddress.TryParse解析が失敗した場合に例外を発生させないものを試すこともできます。お気に入り:

string str = "     127.1.1.1       ";
IPAddress a;
if (IPAddress.TryParse(str.Trim(), out a))
{
    //parsing succesful
}
else
{
    //invalid string
}

string.Join次のように文字列を連結するために使用することもできます。

string ip = string.Join(".", tabtempsoctets1);
于 2013-11-05T19:21:46.523 に答える
1

文字列を正しく設定string[] tabtempsoctets1 = { "127", "1", "1", "1" };すると、上記のコードが機能するように見えます。

範囲を確認するために、バイト配列に変換してみてください。

これは、Win7 PC で正常に使用したテスト アプリです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;

namespace IPAddressTesting
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] tabtempsoctets1 = { "127", "1", "1", "1" };
        Ping pingeage = new Ping();
        //Ping pingeage = new Ping();
        String ip = tabtempsoctets1[0]
            + "." + tabtempsoctets1[1]
            + "." + tabtempsoctets1[2]
            + "." + tabtempsoctets1[3];
        Console.WriteLine(ip);
        IPAddress adresseTest = IPAddress.Parse(ip);
        Console.WriteLine(adresseTest.ToString());

        byte [] addressAsBytes = new byte[tabtempsoctets1.Length];
        for (int i = 0; i < tabtempsoctets1.Length; i++)
        {
            if (!byte.TryParse(tabtempsoctets1[i], out addressAsBytes[i]))
                Console.WriteLine(tabtempsoctets1[i] + " is not formated correctely");
        }
        IPAddress adresseTest2 = new IPAddress(addressAsBytes);
        Console.WriteLine(adresseTest2.ToString());
        PingReply reponse = pingeage.Send(adresseTest2, 2000);
        Console.WriteLine(reponse.Status.ToString());

        Console.ReadKey();
    }
}

}enter code here

于 2013-11-05T19:52:23.873 に答える