TCP 포트가 사용 중인지 체크하기
TCP/IP 포트가 사용 중인지 체크하기 위해서는 System.Net.NetworkInfomation 네임스페이스에 있는 IPGlobalProperties 클래스를 사용한다. IPGlobalProperties 클래스는 로컬 컴퓨터의 네트워크 연결과 관련된 다양한 정보를 제공해 주는 클래스이다.
IPGlobalProperties 클래스의 여러 멤버 중 TCP 포트가 사용 중인지 체크하기 위해 사용하는 메서드는 다음 두가지이다.
GetActiveTcpConnections() : 이 메서드는 Listening 상태를 제외한 모든 TCP Connection들을 리턴한다. 즉 포트가 사용되고 있거나 대기 중이거나 또는 닫히고 있거나 닫힌 상태의 모든 TCP 연결 정보들을 리턴한다.
GetActiveTcpListeners() : 이 메서드는 Listening 상태에 있는 TCP Listener들을 리턴한다. 즉 Port를 오픈하고 클라이언트를 Listening 하고 있는 TCP 서버들의 네트워크 연결 정보를 리턴한다.
위의 2가지 메서드 사용하여 로컬 컴퓨터 내에서 어떤 포트가 사용 중인지 체크하는 코드를 아래 예제와 같이 작성할 수 있음
public static bool IsTcpPortAvailable(int tcpPort)
{
var ipgp = IPGlobalProperties.GetIPGlobalProperties();
// Check ActiveConnection ports
TcpConnectionInformation[] conns = ipgp.GetActiveTcpConnections();
foreach(var cn in conns)
{
if(cn.LocalEndPoint.Port == tcpPort)
{
return false;
}
}
// Check LISTENING ports
IPEndPoint[] endpoints = ipgp.GetActiveTcpListeners();
foreach(var ep in endpoints)
{
if(ep.Port == tcpPort)
{
return false;
}
}
return false;
}
netstat 유틸리티
대표적인 네트워크 유틸리티인 netstat를 사용하여 어떤 포트가 사용 중인지 쉽게 체크할 수 있다. 아래는 윈도우즈에서 netstat을 사용하여 1433 포트가 사용 중인지 체크하고, 어떤 프로그램이 그 포트를 사용하고 있는지 체크해 본 예이다. 여기서 3116은 그 포트를 사용하는 프로세스 ID(PID)이고, 이를 tasklist라는 유틸리티로 찾아본 결과 sqlservr.exe가 그 포트를 사용하고 있음을 표시하고 있다.
C> netstat -ano | find "1433"
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 3116
C> tasklist /FI "PID eq 3116"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
sqlservr.exe 3116 Services 0 12,232 K
출처) 예제로 배우는 C# 프로그래밍
'C#' 카테고리의 다른 글
[C#] Socket 클라이언트 (0) | 2024.06.24 |
---|---|
[C#] 네트워크 프로그래밍 (0) | 2024.06.24 |
[C#] 비동기 TCP 서버 (0) | 2024.06.24 |
[C#] TCP 화면 전송 예제 (0) | 2024.06.24 |
[C#] TCP 클라이언트 클래스와 사용법 (0) | 2024.06.24 |