6. 중앙 관제 6.2 내 컴퓨터 IP 주소 얻어오기 [Wafer 코팅 시뮬레이션]

안녕하세요. 언제나휴일입니다.

1. 구현할 내용

Wafer 코팅 시뮬레이션의 마지막 파트인 중앙 관제 구현을 하고 있습니다.

중앙 관제는 WaferLine 공장과 통신을 통해 제어 및 상황을 파악합니다.

이번 강의에서는 로컬 호스트의 IP 주소를 얻어오는 작업을 진행할게요.

WaferLine 공장은 중앙 관제에서 원격 제어를 수신하기 위한 FactoryServer를 가동해야 합니다.

이 때 WaferLine 공장의 IP 주소 목록 중에 하나를 선택하여 설정할 수 있어야 합니다.

그리고 중앙 관제에서도 공장의 상태를 수신하기 위한 ControlServer를 가동합니다.

이 때 중앙 관제의 디폴트 IP 주소로 설정합니다.

2. 나의 IP 주소 얻어오기 구현

Wafer 코팅 시뮬레이션 솔루션에 WaferLineCommLib 프로젝트(클래스 라이브러리(.NET Framework))를 추가합니다.

디폴트로 제공하는 Class1.cs를 MyNetwork.cs로 변경하세요.

정적 속성으로 IP 주소 목록을 제공하는 속성을 구현합시다.

Dns의 정적 메서드 GetHostName를 통해 로컬 호스트에서의 내 컴퓨터 이름을 얻어옵니다.

그리고 Dns의 정적 메서드 GetHostEntry를 통해 IPHostEntry를 얻어옵니다.

그리고 IPHostEntry 목록의 주소 목록 중에서 IPv4에 해당하는 주소를 컬렉션에 추가하여 반환합니다.

using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;

namespace WaferLineCommLib
{
    public class MyNetwork
    {
        public static List<IPAddress> Addresses
        {
            get
            {
                List<IPAddress> addresses = new List<IPAddress>();
                string name = Dns.GetHostName();
                IPHostEntry iphe = Dns.GetHostEntry(name);
                foreach(IPAddress addr in iphe.AddressList)
                {
                    if(addr.AddressFamily == AddressFamily.InterNetwork)
                    {
                        addresses.Add(addr);
                    }    
                }
                return addresses;
            }
        }
    }
}

2. 공장의 로컬 IP 주소 목록 얻어오기

WaferLine 공장 시뮬레이션 프로젝트에 WaferLineCommLib를 참조 추가합니다.

그리고 MainForm의 Load 이벤트 핸들러를 추가하세요.

cbox_ip의 DataSource를 MyNetwork.Addresses로 설정합니다.

콤보 박스와 리스트 박스의 DataSource에 선형 컬렉션을 설정하여 의존 관계를 맺을 수 있습니다.

    public partial class MainForm : Form
    {
        ...중략...
        private void MainForm_Load(object sender, EventArgs e)
        {
            cbox_ip.DataSource = MyNetwork.Addresses;
        }
        ...생략...

3. 중앙 관제의 로컬 IP 주소 설정하기

중앙 관제 프로젝트에 WaferLineCommLib를 참조 추가합니다.

CentralForm에 Load 이벤트 핸들러를 추가하세요.

tbox_me의 Text 속성을 MyNetwork.Addresses의 인덱스 0의 값으로 설정합니다.

    public partial class CentralForm : Form
    {
        ...중략...
        private void CentralForm_Load(object sender, EventArgs e)
        {
            IPAddress defaddr = MyNetwork.Addresses[0];
            tbox_me_ip.Text = defaddr.ToString();
        }
        ...생략...