C# 将主机名转换为IP地址,然后ping
旁注:我真的想不出一个好的标题 好的,我正在更新一个由一个不相信代码重用的开发人员编写的程序。因此,我的任务是更新并使其“友好”以适应未来的变化 编辑我应该说:最终用户想要一个命令提示符来查看每个ping。我知道使用内置的ping是一个更好的选择,但这是他们想要的…你们知道这是怎么回事 我正在使用一个类,该类在整个程序中实现了几次。(以前有两个类基本上做相同的事情) 我决定制作一个接口并在类上实现它 (我失去你了吗) 该方法实际上只是将主机名(方法参数之一)转换为ipaddress,并生成命令提示符对其进行ping。我还有一个单独的类,它实现接口并调用该方法,但不传递字符串(主机名),而是传递ipaddress对象 我的问题在于:在处理可能改变类型的参数时,什么是最佳实践?有人能看看我做了什么吗?这很好,我只是想确定这是最佳实践C# 将主机名转换为IP地址,然后ping,c#,properties,ip-address,C#,Properties,Ip Address,旁注:我真的想不出一个好的标题 好的,我正在更新一个由一个不相信代码重用的开发人员编写的程序。因此,我的任务是更新并使其“友好”以适应未来的变化 编辑我应该说:最终用户想要一个命令提示符来查看每个ping。我知道使用内置的ping是一个更好的选择,但这是他们想要的…你们知道这是怎么回事 我正在使用一个类,该类在整个程序中实现了几次。(以前有两个类基本上做相同的事情) 我决定制作一个接口并在类上实现它 (我失去你了吗) 该方法实际上只是将主机名(方法参数之一)转换为ipaddress,并生成命令提
// Interface that is implement twice in the program
interface Icmd_Ping
{
void initilize_Proc(object target, string last_Octet);
}
class process_spawn : Icmd_Ping
{
writeLog_Delegate writeLog = new writeLog_Delegate(error_Log.write_log);
private string ipaddress;
public object Ipaddress
{
get { return ipaddress; }
set
{
IPAddress ip = value as IPAddress;
if (ip != null)
ipaddress = ip.ToString();
else
{
try
{
formatIP format = new formatIP();
ipaddress = format.convert_Ip(((string)value));
}
catch (Exception ex)
{
writeLog(ex);
}
}
}
}
public void initilize_Proc(object target, string last_Octet = null)
{
if (target == null)
throw new ArgumentNullException();
formatIP format_IP = new formatIP();
this.Ipaddress = target;
Process cmd = new Process();
ProcessStartInfo psi = new ProcessStartInfo {FileName = "cmd", UseShellExecute = false, RedirectStandardOutput = false };
cmd.StartInfo = psi;
if (last_Octet != string.Empty)
psi.Arguments = string.Format("/c ping {0} -t", format_IP.format_Ip(((string)Ipaddress), last_Octet));
if (last_Octet == string.Empty)
psi.Arguments = string.Format("/c ping {0} -t", ((string)Ipaddress));
cmd.Start();
}
}
我应该转换IPaddress属性中的IPaddress吗?或者只是创建一个新方法并调用它
对不起,我知道这一点不是很优雅,我只是想在我真正深入研究这一点之前确保我在写作方向上
谢谢大家的帮助 首先,我建议使用
System.Net.IPAddress
而不是自己滚动。
其次,您可以使用System.Net.NetworkInformation.Ping
执行ICMP回显
e、 g
IPAddress ip=IPAddress.Parse(“192.168.0.1”);
Ping Ping=新Ping();
对于(int i=0;i<4;++i)
{
var reply=ping.Send(ip);
WriteLine(“来自{0}的回复状态:{1}时间:{2}ms”,
答复.地址:,
答复.现状,
答复:往返时间);
}
您可以使用.NET函数DNS.GetHostAddresses()将DNS条目解析为单个主机地址(我认为这也是您的要求之一)
然后,将回复格式化为类似于ping工具的格式。对于TTL和字节发送,参数也可以通过.NET中的Ping.Send()API进行控制。您是否关心
this.Ipaddress=target
以及如何处理不同的类型?你愿意放弃这一切吗?不,最终用户需要一个命令提示符。我试着相信我。。。是的,我关心的是让它对不同的类型安全。
IPAddress ip = IPAddress.Parse("192.168.0.1");
Ping ping = new Ping();
for (int i = 0; i < 4; ++i)
{
var reply = ping.Send(ip);
Console.WriteLine("Reply from {0} Status: {1} time:{2}ms",
reply.Address,
reply.Status,
reply.RoundtripTime);
}
foreach (IPAddress address in Dns.GetHostAddresses(hostName))
{
PingReply reply = Ping.Send(address);
...
}