첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

▶ 이용 가능한 포트 구하기 예제

int availablePort = GetAvailablePort(30000, 50000);

 

▶ 이용 가능한 포트 구하기

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;

#region 이용 가능한 포트 구하기 - GetAvailablePort(startPort, endPort)

/// <summary>
/// 이용 가능한 포트 구하기
/// </summary>
/// <param name="startPort">시작 포트</param>
/// <param name="endPort">종료 포트</param>
/// <returns>이용 가능한 포트</returns>
public int GetAvailablePort(int startPort, int endPort)
{
    IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();

    IPEndPoint[] tcpEndPointArray = ipGlobalProperties.GetActiveTcpListeners();

    List<int> tcpPortList = tcpEndPointArray.Select(p => p.Port).ToList<int>();

    IPEndPoint[] udpEndPointArray = ipGlobalProperties.GetActiveUdpListeners();

    List<int> udpPortList = udpEndPointArray.Select(p => p.Port).ToList<int>();

    TcpConnectionInformation[] tcpConnectionInformationArray = ipGlobalProperties.GetActiveTcpConnections();

    List<int> usedPortList = tcpConnectionInformationArray.Where(p=> p.State != TcpState.Closed).Select(p => p.LocalEndPoint.Port).ToList<int>();

    usedPortList.AddRange(tcpPortList.ToArray());
    usedPortList.AddRange(udpPortList.ToArray());

    int unusedPort = 0;

    for(int port = startPort; port < endPort; port++)
    {
        if(!usedPortList.Contains(port))
        {
            unusedPort = port;

            break;
        }
    }

    return unusedPort;
}

#endregion
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요