C #에서 ping 사용
Windows가있는 원격 시스템을 Ping하면 응답이 없다고 표시되지만 C #으로 Ping하면 성공이라고 표시됩니다. Windows가 정확하고 장치가 연결되지 않았습니다. Windows가 아닌데도 내 코드가 성공적으로 ping 할 수있는 이유는 무엇입니까?
내 코드는 다음과 같습니다.
Ping p1 = new Ping();
PingReply PR = p1.Send("192.168.2.18");
// check when the ping is not success
while (!PR.Status.ToString().Equals("Success"))
{
Console.WriteLine(PR.Status.ToString());
PR = p1.Send("192.168.2.18");
}
// check after the ping is n success
while (PR.Status.ToString().Equals("Success"))
{
Console.WriteLine(PR.Status.ToString());
PR = p1.Send("192.168.2.18");
}
using System.Net.NetworkInformation;
public static bool PingHost(string nameOrAddress)
{
bool pingable = false;
Ping pinger = null;
try
{
pinger = new Ping();
PingReply reply = pinger.Send(nameOrAddress);
pingable = reply.Status == IPStatus.Success;
}
catch (PingException)
{
// Discard PingExceptions and return false;
}
finally
{
if (pinger != null)
{
pinger.Dispose();
}
}
return pingable;
}
C #에서 ping을 사용하는 방법 Ping.Send(System.Net.IPAddress)
은 제공된 유효한 IP 주소 또는 URL에 대한 ping 요청을 실행하고 그에 대한 20 바이트의 헤더를 포함하는 ICMP (Internet Control Message Protocol) 패킷 이라는 응답을받습니다. ping 요청을 수신 한 ping 된 서버의 응답 데이터를 포함하고 .Net 프레임 워크 System.Net.NetworkInformation
네임 스페이스에는 응답 PingReply
을 변환하고 다음 ICMP
과 같은 ping 된 서버 네트워킹에 대한 유용한 정보를 제공 하도록 설계된 속성 이있는 Class라는 클래스가 포함됩니다.
- IPStatus : ICMP (Internet Control Message Protocol) 에코 응답을 보내는 호스트의 주소를 가져옵니다.
- IPAddress : ICMP (Internet Control Message Protocol) 에코 요청을 보내고 해당 ICMP 에코 응답 메시지를받는 데 걸리는 시간 (밀리 초)을 가져옵니다.
- RoundtripTime (System.Int64) : ICMP (Internet Control Message Protocol) 에코 요청에 대한 응답을 전송하는 데 사용되는 옵션을 가져옵니다.
- PingOptions (System.Byte []) : ICMP (Internet Control Message Protocol) 에코 응답 메시지에서 수신 한 데이터의 버퍼를 가져옵니다.
다음은 WinForms
유효한 IP 주소를 제공 textBox1
하고를 클릭하여 C #에서 ping이 작동하는 방식을 보여주는 간단한 예제 button1
입니다 . IP 또는 URL 주소를 저장할 로컬 변수 문자열 Ping class
인 PingReply
, 의 인스턴스를 생성 한 다음 PingReply
생성 한 로컬 변수를 ping Send 메서드에 할당 한 다음 응답 상태를 속성 IPAddress.Success
상태와 비교하여 요청이 성공했는지 검사 한 다음 PingReply
로컬 변수에서 사용자에게 표시해야하는 정보를 추출 합니다. 전술 한 바와:
using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;
namespace PingTest1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Ping p = new Ping();
PingReply r;
string s;
s = textBox1.Text;
r = p.Send(s);
if (r.Status == IPStatus.Success)
{
lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
+ " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
}
}
private void textBox1_Validated(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
{
MessageBox.Show("Please use valid IP or web address!!");
}
}
}
}
private void button26_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
proc.FileName = @"C:\windows\system32\cmd.exe";
proc.Arguments = "/c ping -t " + tx1.Text + " ";
System.Diagnostics.Process.Start(proc);
tx1.Focus();
}
private void button27_Click(object sender, EventArgs e)
{
System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
proc.FileName = @"C:\windows\system32\cmd.exe";
proc.Arguments = "/c ping " + tx2.Text + " ";
System.Diagnostics.Process.Start(proc);
tx2.Focus();
}
참고 URL : https://stackoverflow.com/questions/11800958/using-ping-in-c-sharp
'Program Tip' 카테고리의 다른 글
JSON의 유효성을 검사하는 정규식 (0) | 2020.10.06 |
---|---|
devise의 sign_in 작업에 대한 다른 레이아웃 (0) | 2020.10.06 |
HighCharts-포인트를 끄려면 어떻게해야합니까? (0) | 2020.10.06 |
java.lang.ClassNotFoundException : com.sun.jersey.spi.container.servlet.ServletContainer (0) | 2020.10.06 |
Google Maps API v3에서 SVG 마커를 사용하는 방법 (0) | 2020.10.06 |