Written by Youngil Kim, C#.NET Developer
.NET Framework 2.0부터 새롭게 추가된 Ping클래스는 System.Net.NetworkInformation 네임스페이스에 추가되어 있습니다. Ping클래스를 사용하면, TCP/IP상의 특정 컴퓨터에 ICMP(Internet Control Message Protocol) 에코메세지를 송신하고 그 응답을 받을 수 있고 원격컴퓨터상에서 응답속도를 확인하는 것도 가능합니다.
Ping클래스를 사용하여 ping 패킷 송수신방법은 다음과 같이 2가지가 존재합니다.
- 동기통신(기본적으로 응답이 리턴될때까지 대기상태임)
- 비동기통신(송신이 되면 바로 제어상태로 돌아옴)
이중에서 동기통신방법을 구현해보도록 하겠습니다. 비동기통신방법은 MSDN의 Ping.SenAsync메소드를 참고로 만들어보시면 될것같습니다.
MSDN: http://msdn2.microsoft.com/ko-kr/library/xya3e0zf(VS.80).aspx
동기방식은 Ping클래스의 인스턴스를 만들고 Send메소드를 호출하는 형태로 구현하면 되는데 몇가지 부하가 생길 수 있는 소지는 있습니다. 이에 대해서는 아래 MSDN을 참고해주세요.
MSN: http://msdn2.microsoft.com/ko-kr/library/system.net.networkinformation.ping.send(VS.80).aspx
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading;
class PingApp {
static void Main(string[] args) {
string addr = "127.0.0.1";
try {
IPHostEntry ip = Dns.GetHostEntry(addr);
string hostName = ip.HostName;
string ipAddr = ip.AddressList[0].ToString();
Console.WriteLine("Pinging {0} [{1}] with 32bytes of data:\n", hostName, ipAddr);
Ping sender = new Ping();
for(int i=0; i<4; i++) {
PingReply reply = sender.Send(addr);
if(reply.Status == IPStatus.Success) {
Console.WriteLine("Reply from {0}: bytes={1} time={2}ms TTL={3}",
reply.Address,
reply.Buffer.Length,
reply.RoundtripTime,
reply.Options.Ttl);
} else {
Console.WriteLine(reply.Status);
}
if(i<3) {
Thread.Sleep(1000);
}
}
Console.WriteLine("\nPing.Send 완료!");
} catch(SocketException ex) {
string errorMsg = string.Format("호스트 {0}을 찾을 수 없습니다\n
-> 사유:{1}", addr, ex.Message);
Console.WriteLine(errorMsg);
} catch(PingException ex) {
string errorMsg = string.Format("{0}에 의해 ping패킷송신이 실패하였습니다\n
-> 사유:{1}", addr, ex.InnerException.Message);
Console.WriteLine(errorMsg);
}
}
}
'[ Program ] > C#' 카테고리의 다른 글
키 이벤트 발생 시키기 - keybd_event() (0) | 2012.09.17 |
---|---|
WebClient 클래스를 이용한 파일 다운로드 문제 (0) | 2012.09.17 |
[C#] string, char 배열을 byte 배열로 변환 (0) | 2012.09.17 |
[C#] Byte 배열을 String으로 변환 (0) | 2012.09.17 |
.NET 메모리관리 (0) | 2012.09.17 |
댓글