자료 참고 안내 1. 본 자료실의 모든 자료 저작권은 ㈜에이치앤에스에 있습니다.

본 자료는 개발하시는데 참고자료 용도로 사용하실 수 있으며 저작권 표시 없이 복사,게재, 출판 하실 수 없습니다. 외부 게재 사용 시 반드시 출처 항목에 회사명과 사이트 주소를 반드시 명시해 주시기 바랍니다.
[표기 예] 출처 : ㈜에이치앤에스(www.hnsts.co.kr) 또는 ㈜HNS(www.hnsts.co.kr)

2. 제품 개발 시 내용과 예제 코드는 수정 및 검증작업을 직접 하셔야 하며 문제 발생에 대한 책임은 ㈜HNS사와 무관합니다.

본사는 자료를 최신내용으로 유지하기 위해 노력하고 있으며 제공되는 정보의 오류 및 내용이 정확하지 않을 경우 사전 공지 없이 업데이트 될 수 있습니다. 자료의 문제점 발견 시 본사로 문의주시면 검토하여 자료를 수정하도록 하겠습니다.

[C#, VB.NET] IEC-Series에서 최적화된 Network 연결 처리 방법
작성일 2023-09-01 수정일 2023-12-29 조회수 477
분류 SmartX Framework
적용
플랫폼
키워드 네트워크 연결, 네트워크 연결 지연, MAC Address, 유무선 네트워크, TCP 통신
첨부파일 TechNote80_Example.Zip

본 자료는
1. IEC-Series에서의 네트워크 사용에 따른 고려 사항
1-1. 네트워크 연결 지연 시간에 따른 고려 사항
1-2. 유선 네트워크 사용 시 MAC Address에 대한 고려 사항
2. CNetworkDeviceManagement Class 소개
2-1. 인터페이스 설명
3. CNetworkDeviceManagement Class적용하기
3-1. Class 가져오기
3-2. Client 관련 정보 설정
3-3. 유선 랜 환경에서 사용하기
3-3-1. MAC Address 설정하기
3-3-2. IP 관련 정보 설정하기 (유선일 경우)
3-4. 무선 랜 환경에서 사용하기
3-4-1. IP 관련 정보 설정하기 (무선일 경우)
3-5. 이벤트 등록
4. 적용 예제 (주요 코드)
순서로 진행합니다.

중요본 자료에서 제공하고 있는 CNetworkDeviceManagement Class의 기능은 TCP-Client(SmartTCPClient) 측에서 사용하는 것을 권장하며 1(Server) : N(Client) 연결 구성에서는 매우 안정된 Network 연결 환경을 처리할 수 있습니다.
1. IEC-Series에서의 네트워크 사용에 따른 고려 사항 1-1. 네트워크 연결 지연 시간에 따른 고려 사항

IEC-Series의 경우 제품이 테스트 환경이 아닌 실제 사용되는 RunTime 환경에서 유무선 네트워크를 사용할 경우 두가지 이유로 인해 제품의 전원이 켜진 뒤 실제 네트워크가 연결 및 사용 가능한 상태로 도달하기까지 지연 시간이 발생하기 때문에 네트워크 통신이 가능한 상태가 되었는지 체크하는 과정이 필요합니다.

1. IEC-Series 제품의 전원이 켜진 뒤 네트워크 드라이버가 활성화되기까지 지연 시간이 발생
2. 네트워크 드라이버가 활성화되어 네트워크 장비로부터 IP Address를 할당 받기까지 지연 시간이 발생

1-2. 유선 네트워크 사용 시 MAC Address에 대한 고려 사항

IEC-Series 제품 뒷면에 있는 고유 MAC Address를 등록하지 않은 경우 기본값 즉, 동일한 값으로 설정되어 있습니다. 만약 유선 네트워크에 연결하여 로컬에 여러 대의 제품이 네트워크에 연결되었을 때 MAC Address가 겹치는 경우 정상적으로 IP Address를 할당 받을 수 없습니다. 그렇기 때문에 반드시 제품 뒷면에 있는 제품별 고유 MAC Address를 등록하시기 바랍니다.

MAC Address는 제품이 초기화되면 기본값으로 설정되기 때문에 제품이 초기화된 이후에도 반드시 MAC Address를 등록해야 합니다. 제품을 초기화 하는 작업이 여러 번 발생하는 경우 항상 제품 뒷면을 확인하여 16진수의 값을 10진수 변경하고 등록해야 하는 과정이 번거롭기 때문에 MAC Address를 텍스트 파일로 만들어 관리하면 16진수의 값으로도 텍스트 파일을 사용해 간편하게 등록할 수 있는 기능을 구성하여 빠르고 편리하게 MAC Address를 관리할 수 있습니다.

2. CNetworkDeviceManagement Class 소개 <주요 기능>

1. 네트워크 연결 지연에 따른 처리
2. 유선 네트워크 사용시 MAC Address 처리

제품 부팅이 완료되고, 프로그램 시작 직후 바로 서버와의 연결을 진행할 경우 네트워크 지연시간으로 인해 연결에 실패하게 됩니다. 프로그램 상에서 네트워크 연결 여부를 확인하여 정상적인 네트워크 사용이 가능한 시점에 이벤트를 발생하여 서버와의 연결 관리를 안정적으로 할 수 있도록 합니다.

개발 단계에서 네트워크 사용이 가능한 상태가 되었는지 확인하는 코드를 구성하고 테스트를 진행하는 과정을 최소한으로 줄이기 위해서 Class를 프로젝트에 추가하여 간편하게 기능을 사용할 수 있도록 구성하였습니다.

개발자는 CNetworkDeviceManagement Class의 주요 기능을 통해 기존 혹은 신규 프로젝트에 적용하여 프로그램을 편리하게 작성할 수 있습니다.

다음으로는 CNetworkDeviceManagement Class가 어떻게 구성되어 있으며 사용 및 적용 방법에 대해서 설명 드리겠습니다.

2-1. 인터페이스 설명
※ 프로퍼티(속성)
인터페이스명 pSmartConfig
설명 CNetworkDeviceManagement Class에 전달할 SmartConfigs 컴포넌트를 설정합니다.
인터페이스명 IPAllocationRetryMAX
설명 IP 할당 여부 확인 최대 횟수를 설정합니다.
인터페이스명 ServerConnectRetryMAX
설명 서버 연결을 시도할 최대 횟수를 설정합니다.
인터페이스명 FailedMessage
설명 IPAllocationRetryMax로 설정한 횟수 이상 네트워크 연결에 실패했을 때 출력될 메시지를 설정합니다.
인터페이스명 GetIPAllocationRetryCnt
설명 현재 IP 할당 재시도 횟수를 확인합니다.
인터페이스명 GetServerConnectRetryCnt
설명 현재 Server 연결 재시도 횟수를 확인합니다.
인터페이스명 NetworkDeviceType
설명 사용할 네트워크 타입을 설정합니다. ※ 무선 랜 (신형RT2870 / 구형RT2501), 유선 랜
인터페이스명 MACAddressFilePathName
설명 MAC Address 설정에 필요한 MAC Address 파일 경로를 설정합니다.
※ 메서드(함수)
인터페이스명 SetIPSettings(NetIPSetInfos IPInfos)
설명 iDHCP, DeviceIP, GateWay, SubNetMask, PrimaryDNS, SecondaryDNS, PrimaryWINS, SecondaryWINS 와 같은 네트워크 설정을 적용합니다.

[인자]
• SetIPSettings(NetIPSetInfos IPInfos)
NetIPSetInfos IPInfos.iDHCP : IP 할당 방식을 고정 또는 동적으로 설정합니다.
※ 0 : 고정 IP 사용 (Static), 1 : 동적 IP 사용 (DHCP)
NetIPSetInfos IPInfos.DeviceIP : IP 할당 방식이 고정(Static) 인 경우 할당 받을 IP Address
NetIPSetInfos IPInfos.GateWay : IP 할당 방식이 고정(Static) 인 경우 네트워크 장비의 GateWay 주소
NetIPSetInfos IPInfos.SubNetMask : IP 할당 방식이 고정(Static)인 경우 네트워크 장비의 SubNetMask 주소
NetIPSetInfos IPInfos.PrimaryDNS : IP 할당 방식이 고정(Static) 인 경우 할당 받을 PrimaryDNS 주소
NetIPSetInfos IPInfos.SecondaryDNS : IP 할당 방식이 고정(Static)인 경우 할당 받을 SecondaryDNS 주소
NetIPSetInfos IPInfos.PrimaryWINS : IP 할당 방식이 고정(Static)인 경우 할당 받을 PrimaryWINS 주소
NetIPSetInfos IPInfos.SecondaryWINS : IP 할당 방식이 고정(Static)인 경우 할당 받을 SecondaryWINS 주소
인터페이스명 Start()
설명 네트워크 연결 시도 및 네트워크 IP 할당 여부 확인을 시작합니다.
인터페이스명 Stop()
설명 네트워크 연결 시도 및 네트워크 IP 할당 여부 확인을 중지합니다.
인터페이스명 SetAPInfos(string strAPAddress, string strAPName, string strAPPassword)
설명 무선 네트워크를 사용하는 경우 무선 네트워크의 AP 정보를 설정합니다.
string strAPAddress : AP의 할당된 IP Address
string strAPName : AP의 SSID
string strAPPassword : AP가 암호환된 경우 AP에 설정된 네트워크 키
(설정된 네트워크 키가 없는 경우 strAPPassword 값을 빈 문자열 ("") 로 처리합니다)
인터페이스명 MacAddress_Setting()
설명 네트워트 연결 전 MAC Address 텍스트 파일과 현재 설정되어 있는 MAC Address를 비교 및 설정합니다. (유선 네트워크를 사용하는 경우)

[리턴값]
bool : MAC Address 비교 및 설정 완료 여부
- true : MAC Address 설정이 정상적으로 되었을 경우
(MAC Address 텍스트 파일과 현재 설정되어 있는 MAC Address 값이 같은 경우 true를 리턴 합니다)
false : MAC Address 설정이 되지 않은 경우
(MAC Address 값을 가지고 있는 파일이 존재하지 않거나 파일의 MAC Address 값이 유효 하지 않은 경우)
※ 이벤트
인터페이스명 On_Completion(ref bool bServerConnect)
설명 네트워크 장비에 연결 후 IP Address가 할당되어 네트워크 통신을 사용할 수 있는 상태가 된 경우 발생되는 이벤트이며, 해당 이벤트 내부에서 서버로 Connect 시도를 진행하여 결과를 bServerConnect 인자에 입력하여 서버와 연결이 실패할 경우 ServerConnectRetryMAX 속성으로 설정한 횟수만큼 이벤트가 반복해서 발생합니다. 만약 지정한 횟수 이상 서버와 연결에 실패할 경우 On_Failed 이벤트가 발생합니다.

[인자값]
ref bool bServerConnect : SmartTCPClient에서 서버로 연결을 시도한 결과를 입력합니다.
인터페이스명 On_Failed(CNetworkDeviceManagement.FailStatus fStatus)
설명 네트워크 연결 및 서버로의 연결 시도에 설정한 횟수 이상 실패할 경우 발생하는 이벤트로 fStatus 인자를 사용하여 네트워크 연결의 실패, 서버 연결 실패를 따로 처리할 수 있습니다.

[인자값]
CNetworkDeviceManagement.FailStatus fStatus : 네트워크 연결 혹은 서버 연결에 실패한 결과
- CNetworkDeviceManagement.FailStatus.IP_Allocation_Failed : 네트워크 연결에 실패한 경우
- CNetworkDeviceManagement.FailStatus.ServerConnect_Failed : 서버 연결에 실패한 경우
3. CNetworkDeviceManagement Class적용하기 3-1. Class 파일 가져오기 1) Class 파일 추가 및 네임스페이스 변경

[STEP-1] : Class 파일을 사용하려는 프로젝트 폴더로 CNetworkDeviceManagement.cs 파일을 [복사]-[붙여넣기] 하여 파일을 복사합니다.

connect

[STEP-2] : Class를 추가하려는 프로젝트의 솔루션 탐색기에서 해당 프로젝트의 마우스 오른쪽 클릭 [Add(추가)] - [Existing Item(기존 항목)]을 선택합니다.

connect

[STEP-3] : 파일 선택 창에서 추가하려는 Class 파일인 CNetworkDeviceManagement.cs 선택하여 Add(추가) 합니다.

connect

[STEP-4] : 추가된 CNetworkDeviceManagement.cs 파일의 namespace를 기존 프로젝트 Form1의 namespace와 동일하게 변경합니다.

connect
3-2. Client 관련 정보 설정 1) Client의 관련 속성 설정 및 SmartConfigs 컴포넌트 추가

[STEP-1] : SmartTCPClient 통신 환경에 맞게 ConnectCallBackType, ReceiveCallBackType, SendCallBackType 속성 및 관련 속성을 설정합니다. ConnectCallBackType의 경우 반드시 Sync로 설정합니다.
[STEP-2] : SmartForm에 SmartConfigs 컴포넌트를 추가합니다.
[STEP-3] : SmartForm에 추가된 smartConfigs1을 Class가 접근할 pSmartConfig 속성 값으로 설정합니다.

// 네트워크 연결 기능을 사용하기 위한 Class 생성
private CNetworkDeviceManagement networkDeviceManagement = new CNetworkDeviceManagement();
private void Form1_Load(object sender, EventArgs e)
{
// Client 관련 정보 설정
// 서버와 연결 방식을 동기 방식으로 설정
smartTCPClient1.ConnectCallBackType = SmartX. SmartTCPClient.CALLBACKTYPE.Sync;
// 데이터 송신 방식을 동기 방식으로 설정
smartTCPClient1.SendCallBackType = SmartX. SmartTCPClient.CALLBACKTYPE.Sync;
// 데이터 수신 방식을 비동기 방식으로 설정
smartTCPClient1.ReceiveCallBackType = SmartX. SmartTCPClient.CALLBACKTYPE.Async;
// 연결할 서버의 IP Address 설정
smartTCPClient1.ServerIPAddress = "192.168.0.30";
// Port 번호 설정
smartTCPClient1.Port = 3377;
// 한 번에 수신 가능한 데이터의 최대 크기 설정
smartTCPClient1.MaxReceiveBufferSize = 1024;
// 서버 데이터 수신에 따른 응답 시간 설정
smartTCPClient1.ReceiveTimeout = 1000;

// networkDeviceManagement 값 설정
// Class 에 전달할 SmartConfigs 컴포넌트 설정
networkDeviceManagement.pSmartConfig = smartConfigs1;
// IPAllocationRetryMax로 설정한 횟수 이상 실패시 출력될 메세지 설정
networkDeviceManagement.FailedMessage = "연결 실패";
// IP 할당 여부를 확인할 최대 횟수 설정
networkDeviceManagement.IPAllocationRetryMax = 100;
// 서버 연결을 시도할 최대 횟수 설정
networkDeviceManagement.ServerConnectRetryMax = 10;
}

3-3. 유선 랜 환경에서 사용하기 3-3-1. MAC Address 설정하기

MacAddress_Setting 메소드를 통해 설정된 경로의 MAC Address 텍스트 파일 유무를 확인하고 MAC Address가 형식에 맞는지 확인합니다. 현재 등록되어 있는 MAC Address 와 MAC Address 텍스트 파일을 비교하여 다를 경우 등록 처리를 진행하며 동일 할 경우 해당 처리 과정을 진행하지 않습니다. MAC Address가 설정된 후 정상적으로 적용될 수 있도록 IEC-Series 재부팅 여부를 확인하여 재부팅을 진행합니다.

[STEP-1] : 유선랜을 사용하기 위해 NetworkDeviceType 속성을 WiredLAN 으로 설정합니다.
[STEP-2] : MAC Address 설정에 필요한 파일의 경로를 설정합니다.
[STEP-3] : MacAddress_Setting 메소드 사용하여 MacAddress가 정상적으로 설정되지 않았을 경우에 대한 코드를 작성합니다.


// 네트워크 타입을 유선 랜으로 설정
networkDeviceManagement.NetworkDeviceType = CNetworkDeviceManagement.NetDeviceType.WiredLAN;
// 네트워트 연결 전 제품별 MAC Address 설정에 필요한 MAC Address 파일 경로 설정
networkDeviceManagement.MACAddressFilePathName = "Flash Disk\\Run\\MacAddress.txt";
// 네트워트 연결 전 제품별 MAC Address 비교 및 설정
if (networkDeviceManagement.MacAddress_Setting() == false)
{
// MAC Address 주소가 설정되지 않을경우 처리
SmartX.SmartMessageBox.Show("MAC Address 설정을 확인 하시기바랍니다.!!!", "MAC Addresss 설정 문제", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}

참고MAC Address를 최초로 설정하거나 기존 값과 다른 값으로 변경하여 설정하는 경우 MAC Address를 정상적으로 적용시키기 위해서는 반드시 IEC-Series 재부팅이 필요합니다.
CNetworkDeviceManagement Class의 MacAddress_Setting 메서드 안에는 MAC Address 설정 기능과 IEC-Series 재부팅 기능의 코드가 포함되어 있습니다. IEC-Series를 재부팅 하기 전 추가 코드 처리가 필요하거나 수정이 필요한 경우 CNetworkDeviceManagement.cs 파일의 MacAddress_Setting 메서드를 확인하여 해당 부분에 필요한 처리 코드를 작성 하시기 바랍니다.
참조 MAC Address 설정에 대한 자세한 내용은 "자료실 → SmartX Framework 관련 → Reference Guide → Part 4. 사용자 편의 컴포넌트 → 3. SmartConfigs" 에서 GetMACAddress, SetMACAddres 메소드 내용을 참조하시기 바랍니다.
3-3-2. IP 관련 정보 설정하기 (유선일 경우) [CASE-1] : 고정(Static)의 경우 IP 관련 정보 설정 및 적용

iDHCP 속성값을 0으로 설정합니다. 고정의 경우 DeviceIP, GateWay, SubNetMask 등 필요한 값을 추가로 설정하여 적용합니다.

// IP 할당 관련 설정을 위한 IPSetInfos 생성
CNetworkDeviceManagement.NetIPSetInfos IPSetInfos = new CNetworkDeviceManagement.NetIPSetInfos();
// IP 할당 방식 설정
IPSetInfos.iDHCP = 0;
// IP 할당 방식이 고정(Static)인 경우 할당 받을 IP Address 설정
IPSetInfos.DeviceIP = "192.168.0.22";
// IP 할당 방식이 고정(Static)인 경우 네트워크 장비의 GateWay 주소 설정
IPSetInfos.GateWay = "192.168.0.1";
// IP 할당 방식이 고정(Static)인 경우 네트워크 장비의 SubNetMask 주소 설정
IPSetInfos.SubNetMask = "255.255.255.0";
// IP 할당 관련 설정값을 전달
networkDeviceManagement.SetIPSettings(IPSetInfos);

[CASE-2] : 동적(DHCP)의 경우 IP 관련 정보 설정 및 적용

iDHCP 속성값을 1로 설정합니다.

// IP 할당 방식 설정
IPSetInfos.iDHCP = 1;
// IP 할당 관련 설정값을 전달
networkDeviceManagement.SetIPSettings(IPSetInfos);

3-4. 무선 랜 환경에서 사용하기

[STEP-1] : 무선랜을 사용하기 위해 NetworkDeviceType 속성을 WirelessLAN_RT2870 / WirelessLAN_RT2501 으로 설정합니다.
[STEP-2] : SetAPInfos 메소드 사용하여 연결할 무선 네트워크의 IP Address, Name, 네트워크 키 정보를 설정합니다.

// 무선랜 타입 설정 (RT2870 – 신형, RT2501 – 구형)
networkDeviceManagement.NetworkDeviceType = CNetworkDeviceManagement.NetDeviceType.WirelessLAN_RT2870;
// AP에 할당된 IP Address, AP Name, AP Password
networkDeviceManagement.SetAPInfos("192.168.0.1", "iptimeA604R", "");


3-4-1. IP 관련 정보 설정하기 (무선일 경우) [CASE-1] : 고정(Static)의 경우 IP 관련 정보 설정 및 적용

iDHCP 속성값을 0으로 설정합니다. 고정의 경우 DeviceIP, GateWay, SubNetMask 등 필요한 값을 추가로 설정하여 적용합니다.

// IP 할당 관련 설정을 위한 IPSetInfos 생성
CNetworkDeviceManagement.NetIPSetInfos IPSetInfos = new CNetworkDeviceManagement.NetIPSetInfos();
// IP 할당 방식 설정
IPSetInfos.iDHCP = 0;
// IP 할당 방식이 고정(Static)인 경우 할당 받을 IP Address 설정
IPSetInfos.DeviceIP = "192.168.0.22";
// IP 할당 방식이 고정(Static)인 경우 네트워크 장비의 GateWay 주소 설정
IPSetInfos.GateWay = "192.168.0.1";
// IP 할당 방식이 고정(Static)인 경우 네트워크 장비의 SubNetMask 주소 설정
IPSetInfos.SubNetMask = "255.255.255.0";
// IP 할당 관련 설정값을 전달
networkDeviceManagement.SetIPSettings(IPSetInfos);

[CASE-2] : 동적(DHCP)의 경우 IP 관련 정보 설정 및 적용

iDHCP 속성값을 1로 설정합니다.

// IP 할당 방식 설정
IPSetInfos.iDHCP = 1;
// IP 할당 관련 설정값을 전달
networkDeviceManagement.SetIPSettings(IPSetInfos);

3-5. 이벤트 설정 [STEP-1] : 이벤트 등록

네트워크 통신이 가능한 상태일 때 발생하는 On_Completion 이벤트와 네트워크 연결 및 서버로의 연결이 실패 되었을 때 발생하는 On_Failed 이벤트를 등록합니다.

// IP 할당 및 Server 연결 성공, 실패 이벤트 등록
networkDeviceManagement.On_Completion += new CNetworkDeviceManagement.CompletionHandler(NetworkDeviceManagement_On_Completion);
networkDeviceManagement.On_Failed += new CNetworkDeviceManagement.FailHandler(NetworkDeviceManagement_On_Failed);

[STEP-2] : On_Completion 이벤트 코드 작성

네트워크 연결 및 IP 할당까지 완료되어 정상적으로 통신이 가능할 때 발생하는 이벤트로 Server에 Connect를 시도하거나 Server Connect에 성공했을 때 데이터를 Send 하는 코드 등을 작성합니다. (bServerConnect인자로 전달된 Server 연결 결과에 따라 ServerConnectRetryMAX 속성 횟수만큼 이벤트가 반복해서 발생됩니다.)

// IP 할당 성공 및 Server 연결 재시도 때 발생되는 이벤트
private void NetworkDeviceManagement_On_Completion(ref bool bServerConnect)
{
// IP 할당에 성공한 경우
labNetworkStatus.Text = "IP 할당 성공";

// IP 할당 성공 후 Server 와 연결 시도
bServerConnect = smartTCPClient1.Connect(400);
// Server 연결에 성공한 경우
if (bServerConnect == true)
{
labConnectionStatus.Text = "Server 연결 성공";
// Server로 데이터를 송신하는 함수
SendToServer();
}
}

[STEP-3] : On_Failed 이벤트 코드 작성

네트워크 연결 및 서버로의 연결을 IPAllocationRetryMax, ServerConnectRetryMax의 Max Count 속성 값 까지 시도 한 후 연결에 실패 했을 때 발생하는 이벤트로 fStatus 인자를 사용하여 네트워크 연결 실패 또는 서버 연결 실패를 구분하여 연결 실패에 대한 처리 코드를 각각 작성합니다. (IP_Allocation_Fail : 네트워크 연결 실패, ServerConnect_Failed : 서버 연결 실패)

// IP 할당 실패 및 Server 연결 실패 횟수가 설정한 횟수 이상 실패한 경우 발생되는 이벤트
private void NetworkDeviceManagement_On_Failed(CNetworkDeviceManagement.FailStatus fStatus)
{
if (fStatus == CNetworkDeviceManagement.FailStatus.IP_Allocation_Failed)
{
// IP 할당에 실패한 경우
labNetworkStatus.Text = "IP 할당 실패";
}
else
{
// Server 연결 실패한 경우
labConnectionStatus.Text = "Server 연결 실패";
}
}

4. 적용 예제(주요 코드)

아래 예시 코드는 Client를 기준으로 주요 기능에 대한 코드만 작성되어 있습니다. 자세한 코드 및 Server의 코드는 첨부 파일을 다운로드 받아 예제 프로그램을 확인하시기 바랍니다. 또한 LED 점등, 점멸 상태로 IP 할당 여부와 네트워크 연결 및 Server의 상태를 각각의 프로그램에서 시각적으로 확인할 수 있도록 구성 되어있으니 참고하시기 바랍니다.

Client
IP 할당 중
(LED 점멸)
IP 할당 실패
(LED 점등)
IP 할당 성공
(LED 점등)
Server 연결 중
(LED 점멸)
Server 연결 실패
(LED 점등)
Server 연결 성공
(LED 점등)
Server 연결 해제
(LED OFF)
Server
IP 할당 중
(LED 점멸)
IP 할당 실패
(LED 점등)
IP 할당 성공
(LED 점등)
Server 시작
(LED 점등)
Server 중지
(LED 점등)
  • Server
  • Client
C# 예제코드

소스코드는 참고 및 학습용으로 버그 및 여러가지 문제가 있을수 있습니다.

// 본 예제에서는 #define 지시문과 상수를 사용하여 CNetworkDeviceManagement Class 주요 코드 사용법을 설명하고 있습니다.
// #define 지시문 사용(활성화)에 따른 변경 사항을 확인 하여 적용하시길 바랍니다.

// 활성화 : 고정 IP 사용 / 비활성화 : 유동 IP 사용
#define IP_STATIC
// 활성화 : 무선랜 사용 / 비활성화 : 유선랜 사용
#define WIRELESS_LAN

namespace TechNote80_CNetworkDeviceManagement_Client
{
public partial class Form1 : Form

{
public Form1()
{
InitializeComponent();
}

#if IP_STATIC
// 고정 (Static) IP 사용
// IP 할당 방식 설정
private const int I_DHCP = 0;
// IP 할당 방식이 고정(Static)인 경우 할당 받을 IP Address 설정
private const string DEVICE_IP = "192.168.0.9";
// IP 할당 방식이 고정(Static)인 경우 할당 받을 GateWay 주소 설정
private const string GATEWAY = "192.168.0.1";
// IP 할당 방식이 고정(Static)인 경우 네트워크 장비의 SubNetMask 주소 설정
private const string SUBNETMASK = "255.255.255.0";
// IP 할당 방식에 대한 정보 설정
private const string NETWORK_LABEL_INFO1 = "고정 IP";
#else
// 유동 (DHCP) IP 사용
// IP 할당 방식 설정
private const int I_DHCP = 1;
// IP 할당 방식에 대한 정보 설정
private const string NETWORK_LABEL_INFO1 = "동적 IP";
#endif
// IP 할당을 시도할 최대 횟수 설정
private const int IP_ALLOCATION_RETRY_MAX = 100;
// 서버 연결을 시도할 최대 횟수 설정
private const int SERVER_CONNECT_RETRY_MAX = 10;
// ServerConnectRetryMAX로 설정한 횟수 이상 Server 연결에 실패시 출력될 메시지를 설정
private const string SERVER_FAILED_MESSAGE = "1. Server가 Start 되었는지 확인하시기 바랍니다.\n\n2. Server와의 네트워크 연결 상태를 확인하시기 바랍니다.";
#if WIRELESS_LAN
// 무선랜을 사용하여 AP에 연결 하는 경우
// AP에 할당된 IP Address 설정
private const string SETAPINFOS_AP_ADDRESS = "192.168.0.1";
// AP Name 설정
private const string SETAPINFOS_AP_NAME = "iptimeA604R";
// AP Password 설정
private const string SETAPINFOS_AP_PASSWORD = "";
// 무선랜 사용에 대한 정보 설정
private const string NETWORK_LABEL_INFO2 = "무선랜";
// 무선의 경우 MAC Address 설정을 진행하지 않기 위해 빈문자열 처리 (리턴값 true)
private const string strMACAddressPathName = "";
// IPAllocationRetryMax로 설정한 횟수 이상 실패시 출력될 메세지 설정
private const string IP_FAILED_MESSAGE = "1. 무선 랜 카드 연결 상태 및 네트워크 장비 연결을 확인하시기 바랍니다.\n\n2. 네트워크 장비 전원 및 상태를 확인하시기 바랍니다.";
#else
// 유선랜의 경우 MAC Address 설정을 위한 txt 파일 경로 상수 설정
private const string strMACAddressPathName = "Flash Disk\\Run\\MacAddress.txt";
// 유선랜 사용에 대한 정보 설정
private const string NETWORK_LABEL_INFO2 = "유선랜";
// IPAllocationRetryMax로 설정한 횟수 이상 실패시 출력될 메세지 설정
private const string IP_FAILED_MESSAGE = " 1. 유선 랜 케이블 및 네트워크 장비 연결을 확인하시기 바랍니다.\n\n2. 네트워크 장비 전원 및 상태를 확인하시기 바랍니다.";
#endif
// IP 할당 및 Server 연결 상태에 따른 Enum
private enum NetworkConnect
{
IPAllocating,
IPAllocatingFail,
IPAllocated,
ServerConnecting,
ServerConnectingFail,
ServerConnected,
ServerDisConnect
}

// 연결할 Server의 IP Address 설정
private const string SERVER_IP_ADDRESS = "192.168.0.11";
// TCP Port 번호 설정
private const int PORT = 3377;
// 한 번에 수신 가능한 데이터의 최대 크기 설정
private const int MAX_RECEIVE_BUFFER_SIZE = 1024;
// 서버 데이터 수신에 따른 응답 시간 설정
private const int RECEIVETIMEOUT = 1000;

// IP 할당 완료 후 Server 연결을 시도 하기 위한 Flag
private bool m_bIPAllocateFlag = false;
// LED 상태를 변경 시켜 주기 위한 변수
private bool m_bColorTogle = true;
// 현재 IP 할당 및 Server 연결 상태를 저장하는 변수
private NetworkConnect m_NetConnectType;

// IP 할당 및 Server 연결 기능을 사용하기 위한 Class 생성
private CNetworkDeviceManagement networkDeviceManagement = new CNetworkDeviceManagement();

private void Form1_Load(object sender, EventArgs e)
{
smartForm1.MainForm = this;

#region 3-2. Server 및 Client 관련 정보 설정
// Client 관련 정보 설정
// 데이터 수신 처리 방식을 동기 방식으로 설정
smartTCPClient1.SendCallBackType = SmartX.SmartTCPClient.CALLBACKTYPE.Sync;
smartTCPClient1.ServerIPAddress = SERVER_IP_ADDRESS;
smartTCPClient1.Port = PORT;
smartTCPClient1.MaxReceiveBufferSize = MAX_RECEIVE_BUFFER_SIZE;
smartTCPClient1.ReceiveTimeout = RECEIVETIMEOUT;
// networkDeviceManagement 값 설정
networkDeviceManagement.pSmartConfig = smartConfigs1;
networkDeviceManagement.FailedMessage = IP_FAILED_MESSAGE;
networkDeviceManagement.IPAllocationRetryMax = IP_ALLOCATION_RETRY_MAX;
networkDeviceManagement.ServerConnectRetryMax = SERVER_CONNECT_RETRY_MAX;
#endregion

#region 3-X. 유/무선 랜 환경에서 사용하기
#if WIRELESS_LAN
// 무선랜 타입 설정 (RT2870 - 신형 / RT2501 - 구형)
networkDeviceManagement.NetworkDeviceType = CNetworkDeviceManagement.NetDeviceType.WirelessLAN_RT2870;
// AP에 할당된 IP Address, AP Name, AP Password
networkDeviceManagement.SetAPInfos(SETAPINFOS_AP_ADDRESS, SETAPINFOS_AP_NAME, SETAPINFOS_AP_PASSWORD);
#else
// 유선랜 타입 설정
networkDeviceManagement.NetworkDeviceType = CNetworkDeviceManagement.NetDeviceType.WiredLAN;
// 유선랜 연결 전 제품별 MAC Address 설정에 필요한 MAC Address 파일 경로 설정
networkDeviceManagement.MACAddressFilePathName = strMACAddressPathName;
// 유선랜 연결 전 제품별 MAC Address 비교및 설정
if (networkDeviceManagement.MacAddress_Setting() == false)
{
// MAC Address 주소가 설정되지 않을경우 처리
labMACAddressStatus.Text = "설정 실패";
}
else
{
// MAC Address 값을 저장하기 위한 변수
string strMACAddress;
byte[] byteMACAddress;

// 현재 IEC-Series에 설정된 MAC Address 읽어와 배열로 저장
byteMACAddress = smartConfigs1.IPSettings.GetMACAddress();
// 배열로 가져온 MAC Address 를 문자열의 MAC Address의 형식으로 저장
strMACAddress = string.Format("{0:X2}:{1:X2}:{2:X2}:{3:X2}:{4:X2}:{5:X2}", byteMACAddress[0], byteMACAddress[1], byteMACAddress[2], byteMACAddress[3], byteMACAddress[4], byteMACAddress[5]);
// 현재 MAC Address를 출력
labMACAddressStatus.Text = strMACAddress;
}
#endif
// IP 할당 관련 설정을 위한 IPSetInfos 생성
CNetworkDeviceManagement.NetIPSetInfos IPSetInfos = new CNetworkDeviceManagement.NetIPSetInfos();
#if IP_STATIC
// 고정(Static) IP 사용
IPSetInfos.iDHCP = I_DHCP;
IPSetInfos.DeviceIP = DEVICE_IP;
IPSetInfos.GateWay = GATEWAY;
IPSetInfos.SubNetMask = SUBNETMASK;
# else
// 동적(DHCP) IP 사용
IPSetInfos.iDHCP = I_DHCP;
#endif
// IP 할당 관련 설정값을 전달
networkDeviceManagement.SetIPSettings(IPSetInfos);
#endregion

#region 3-5. 이벤트 등록 및 연결 감시
// IP 할당 및 Server 연결 성공, 실패 이벤트 등록
networkDeviceManagement.On_Failed += new CNetworkDeviceManagement.FailHandler(NetworkDeviceManagement_On_Failed);
networkDeviceManagement.On_Completion += new CNetworkDeviceManagement.CompletionHandler(NetworkDeviceManagement_On_Completion);

// IP 할당 여부 확인 및 Server 연결 시도 시작
networkDeviceManagement.Start();
#endregion

// 현재 IP 할당 및 Server 연결 상태를 표시하기 위한 LED 이미지 객체 추가
picStateImg.AddImageList(Properties.Resources.Yellow);
picStateImg.AddImageList(Properties.Resources.Blue);
picStateImg.AddImageList(Properties.Resources.Green);
picStateImg.AddImageList(Properties.Resources.Orange);
picStateImg.AddImageList(Properties.Resources.Red);
picStateImg.AddImageList(Properties.Resources.None);

// IP 할당 시도 Log 메세지 출력을 위한 Timer Interval 설정
LogMsgTimer.Interval = 100;
// IP 할당 시도 횟수를 Log 메세지로 출력 시작
LogMsgTimer.Start();

// #define 지시문 사용에 의해 할당된 IP 관련 정보를 출력
labNetworkInfo.Text = NETWORK_LABEL_INFO1 + "-" + NETWORK_LABEL_INFO2;
// 연결할 서버의 IP Address
labServerIP.Text = SERVER_IP_ADDRESS;

// IP 할당 진행 중 상태 출력
labConnectionStatus.Text = "IP Allocating";
// 현재 연결 상태를 IP 할당 진행중으로 변경
m_NetConnectType = NetworkConnect.IPAllocating;

// IP 할당 및 Server 연결 상태에 따른 LED 상태를 보여주기 위한 Timer Interval 설정
LEDStateTimer.Interval = 500;
// IP 할당 및 Server 연결 상태에 따른 LED 상태 출력 시작
LEDStateTimer.Start();
}

// IP 할당 성공 및 Server 연결 재시도 시 발생되는 이벤트
private void NetworkDeviceManagement_On_Completion(ref bool bServerConnect)
{
// IP 할당에 성공한 경우
if (m_bIPAllocateFlag == false)
{
// 현재 연결 상태를 IP 할당 성공으로 변경
m_NetConnectType = NetworkConnect.IPAllocated;
// IP 할당 진행 횟수 Log 메세지 출력 중지
LogMsgTimer.Stop();

// IP 할당 성공에 의한 처리
labNetworkStatus.Text = "IP 할당 성공";
labConnectionStatus.Text = "IP Allocated";
lsbLogMsg.AddItem("IP 할당 및 네트워크 연결에 성공하였습니다.");
m_bIPAllocateFlag = true;
}

if (NETWORK_LABEL_INFO2 == "무선랜")
{
// 무선랜의 경우 IP Address를 확인
labClientIP.Text = smartConfigs1.USBWirelessIPSettings.DeviceIP.ToString();
}
else
{
// 유선랜의 경우 IP Address를 확인
labClientIP.Text = smartConfigs1.IPSettings.DeviceIP.ToString();
}

// IP 할당 성공 후 Server와 연결 시도
bServerConnect = smartTCPClient1.Connect(400);

// Server 연결에 성공한 경우
if (bServerConnect == true)
{
labConnectionStatus.Text = "Server Connected";
lsbLogMsg.AddItem("Server와의 연결에 성공하였습니다.");

// 현재 연결 상태를 Server와 연결 성공으로 변경
m_NetConnectType = NetworkConnect.ServerConnected;
// Server로 데이터를 송신하는 함수
SendToServer();
}
else
{
// IP 할당 및 Server 연결 시도 횟수를 출력하기 위한 함수
ServerConnectRetryMsg();
// 현재 연결 상태를 Server와 연결 진행중으로 변경
m_NetConnectType = NetworkConnect.ServerConnecting;
// Server 연결 진행 중 상태 출력
labConnectionStatus.Text = "Server Connecting";
}
}

// IP 할당 실패 및 Server 연결 실패 횟수가 설정한 횟수 이상 실패한 경우 발생되는 이벤트
private void NetworkDeviceManagement_On_Failed(CNetworkDeviceManagement.FailStatus fStatus)
{
if (fStatus == CNetworkDeviceManagement.FailStatus.IP_Allocation_Failed)
{
// IP 할당에 실패한 경우
labNetworkStatus.Text = "IP 할당 실패";
labConnectionStatus.Text = "IP Allocating Fail";
lsbLogMsg.AddItem("IP 할당에 실패하였습니다.");

// IP 할당에 실패한 경우 진행 횟수 Log 메시지 출력 중지
LogMsgTimer.Stop();
// 현재 연결 상태를 IP 할당 실패로 변경
m_NetConnectType = NetworkConnect.IPAllocatingFail;
}
else
{
// Server 연결에 실패한 경우
labConnectionStatus.Text = "Server Connecting Fail";
lsbLogMsg.AddItem("Server 연결에 실패하였습니다.");

// Server 연결 실패시 출력될 메세지 박스
SmartX.SmartMessageBox.Size(440, 190);
SmartX.SmartMessageBox.Show(SERVER_FAILED_MESSAGE, "Server 연결 실패", MessageBoxButtons.OK, MessageBoxIcon.Hand);

// 현재 연결 상태를 Server 연결 실패로 변경
m_NetConnectType = NetworkConnect.ServerConnectingFail;
}
}

// IP 할당 재시도 횟수를 Log 메세지로 출력해 주기위해 발생되는 이벤트
private void LogMsgTimer_Tick(object sender, EventArgs e)
{
// IP 할당 재시도 횟수 출력
IPAllocationRetryMsg();
}

// IP 할당 및 Server 연결 시도에 따른 LED 점등, 점멸 상태를 출력해 주기위해 발생되는 이벤트
private void LEDStateTimer_Tick(object sender, EventArgs e)
{
// IP 할당 및 Server 연결 상태에 따른 LED 이미지 출력
ConnectStateShowLED();
}

// 서버로부터 응답 데이터가 수신되었을 때 발생하는 이벤트
private void smartTCPClient1_OnReceiveHandler(byte[] datas)
{
// 문자열 데이터로 변환된 값을 저장할 변수
string strRecvDatas = "";

// 수신받은 ASCII형태의 Byte 데이터를 문자열 데이터로 변환
strRecvDatas = SmartX.SmartTCPClient.ConvertAsciiByteToString(datas);
// 수신받은 데이터를 출력
lsbRecvDatas.AddItem(strRecvDatas);
// 수신 받은 데이터 횟수를 출력
labMsgCnt.Text = lsbRecvDatas.ItemCount.ToString();
}

// IP 할당 재시도 횟수를 출력하기 위한 함수
private void IPAllocationRetryMsg()
{
// IP 할당 재시도 횟수를 출력
if ((m_bIPAllocateFlag == true) && networkDeviceManagement.GetIPAllocationRetryCnt > 0)
{
string strIPRetryCnt = networkDeviceManagement.GetIPAllocationRetryCnt.ToString();
string strIPRetryMsg = "IP 할당 재시도 횟수....." + " [ " + strIPRetryCnt + " / " + IP_ALLOCATION_RETRY_MAX.ToString() + " ]";

if (networkDeviceManagement.GetIPAllocationRetryCnt == 1)
{
lsbLogMsg.ClearAll();
lsbLogMsg.AddItem(strIPRetryMsg);
}
else
{
lsbLogMsg.ModifyItem(0, strIPRetryMsg);
}
}
}

// Server 연결 재시도 횟수를 출력하기 위한 함수
private void ServerConnectRetryMsg()
{
// Server 연결 재시도 횟수를 출력
if ((m_bIPAllocateFlag == true) && networkDeviceManagement.GetServerConnectRetryCnt > 0)
{
string strServerRetryCnt = networkDeviceManagement.GetServerConnectRetryCnt.ToString();
string strServerRetryMsg = "Server 연결 재시도 횟수....." + " [ " + strServerRetryCnt + " / " + SERVER_CONNECT_RETRY_MAX.ToString() + " ]";

if (networkDeviceManagement.GetServerConnectRetryCnt == 1)
{
lsbLogMsg.AddItem(strServerRetryMsg);
}
else
{
lsbLogMsg.ModifyItem(0, strServerRetryMsg);
}
}
}

// IP 할당 및 Server 연결 시도 상태와 네트워크 연결 결과에 따른 LED 점등 및 점멸 상태를 출력해 주기 위한 함수
private void ConnectStateShowLED()
{
int iOnLedIndex = 5;
int iOFFLedIndex = 5;

switch (m_NetConnectType)
{
// IP 할당 진행중 (노란색 LED 점멸)
case NetworkConnect.IPAllocating:
iOnLedIndex = 0;
iOFFLedIndex = 5;
break;
// IP 할당 실패 (빨간색 LED 점등)
case NetworkConnect.IPAllocatingFail:
iOnLedIndex = 4;
iOFFLedIndex = 4;
break;
// IP 할당 성공 (파란색 LED 점등)
case NetworkConnect.IPAllocated:
iOnLedIndex = 1;
iOFFLedIndex = 1;
break;
// Server 연결 진행중 (파란색 LED 점멸)
case NetworkConnect.ServerConnecting:
iOnLedIndex = 1;
iOFFLedIndex = 1;
break;
// Server 연결 실패 (주황색 LED 점등)
case NetworkConnect.ServerConnectingFail:
iOnLedIndex = 3;
iOFFLedIndex = 3;
break;
// Server 연결 성공 (초록색 LED 점등)
case NetworkConnect.ServerConnected:
iOnLedIndex = 2;
iOFFLedIndex = 2;
break;
// Server 연결 해제 (LED OFF)
case NetworkConnect.ServerDisConnect:
iOnLedIndex = 5;
iOFFLedIndex = 5;
break;
}
if (m_bColorTogle == true)
{
m_bColorTogle = false;
picStateImg.DrawNext(iOnLedIndex);
}
else
{
m_bColorTogle = true;
picStateImg.DrawNext(iOFFLedIndex);
}
// NetworkConnect 의 상태가 IP 할당 실패 또는 Server 연결 성공, 해제의 경우 타이머 중지
if (m_NetConnectType != NetworkConnect.IPAllocating && m_NetConnectType != NetworkConnect.IPAllocated && m_NetConnectType != NetworkConnect.ServerConnecting)
{
// IP 할당 및 네트워크 상태에 따른 LED 상태 출력 중지
LEDStateTimer.Stop();
}
}

// 서버로 데이터를 송신하는 함수
private void SendToServer()
{
// 송신할 데이터
string strSendData = labSendMessage.Text;

if (smartTCPClient1.IsConnect == true)
{
// string형 데이터를 ASCII 인코딩 방식으로 송신
smartTCPClient1.SendStringASCII(strSendData);
// 송신 성공에 의한 메세지 출력
lsbLogMsg.AddItem("데이터를 성공적으로 송신/수신 하였습니다!!");
}
else if (labNetworkStatus.Text == "IP 할당 성공")
{
// 서버 연결 실패로 인한 송신 실패 메세지 출력
lsbLogMsg.AddItem("서버 연결 상태를 확인하세요!!");
}
else
{
// IP 할당 및 네트워크 연결 상태로 인한 송신 실패 메세지 출력
lsbLogMsg.AddItem("IP 할당 및 네트워크 연결 상태를 확인하세요!!");
}
}
// 예제 코드에서 생략된 SmartButton의 Click 이벤트 코드는 첨부 파일을 다운로드 받아 확인하시기 바랍니다.
// [Send], [Connect], [DisConnect], [Clear Message List] - Button Click 이벤트
}
}
맨 위로
팝업닫기

(주)에이치앤에스('http://hnsts.co.kr/'이하 '(주)에이치앤에스 웹사이트')는 개인정보보호법에 따라 이용자의 개인정보 보호 및 권익을 보호하고 개인정보와 관련한 이용자의 고충을 원활하게 처리할 수 있도록 다음과 같은 처리방침을 두고 있습니다.

(주)에이치앤에스 웹사이트는 개인정보처리방침을 개정하는 경우 웹사이트 공지사항(또는 개별공지)을 통하여 공지할 것입니다.

○ 본 방침은 2011년 4월 1일부터 시행됩니다.

1. 개인정보의 처리 목적 (주)에이치앤에스 웹사이트는 개인정보를 다음의 목적을 위해 처리합니다. 처리한 개인정보는 다음의 목적 이외의 용도로는
사용되지 않으며 이용 목적이 변경될 시에는 사전동의를 구할 예정 입니다.
가. 민원사무 처리
민원인의 신원 확인, 민원사항 확인, 사실조사를 위한 연락 · 통지, 처리결과 통보 등을 목적으로 개인정보를 처리합니다.
2. 개인정보 파일 현황
1. 개인정보 파일명 : 고객의 소리
  • - 개인정보 항목 : 이메일, 휴대전화번호, 자택전화번호, 이름, 서비스 이용 기록, 접속 로그, 쿠키, 접속 IP 정보
  • - 수집방법 : 웹사이트
  • - 보유근거 : 이용자 동의
  • - 보유기간 : 3년
3. 개인정보의 제3자 제공에 관한 사항
① (주)에이치앤에스 웹사이트는 원칙적으로 이용자의 개인정보를 제1조에서 명시한 목적 범위 내에서 처리하며, 본래의 범위를 초과하여 처리하거나 제3자에게 제공하지 않습니다.
다만, 다음의 경우에는 개인정보를 제3자에게 제공할 수 있습니다.
  • – 이용자가 사전에 제3자 제공 및 공개에 동의한 경우
  • – 법령 등에 의해 제공이 요구되는 경우
  • – 서비스의 제공에 관한 계약의 이행을 위하여 필요한 개인정보로서 경제적/기술적인 사유로 통상의 동의를 받는 것이 현저히 곤란한 경우
  • – 개인을 식별하기에 특정할 수 없는 상태로 가공하여 이용하는 경우
4. 정보주체의 권리,의무 및 그 행사방법 이용자는 개인정보주체로서 다음과 같은 권리를 행사할 수 있습니다.
① 정보주체는 (주)에이치앤에스 웹사이트에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.
  • 1. 개인정보 열람요구
  • 2. 오류 등이 있을 경우 정정 요구
  • 3. 삭제요구
  • 4. 처리정지 요구
② 제1항에 따른 권리 행사는 (주)에이치앤에스 웹사이트에 대해 개인정보 보호법 시행규칙 별지 제8호 서식에 따라 서면, 전자우편, 모사전송(FAX) 등을 통하여 하실 수 있으며 (주)에이치앤에스 웹사이트는
이에 대해 지체 없이 조치하겠습니다.
③ 정보주체가 개인정보의 오류 등에 대한 정정 또는 삭제를 요구한 경우에는 (주)에이치앤에스 웹사이트는 정정 또는 삭제를 완료할 때까지 당해 개인정보를 이용하거나 제공하지 않습니다.
④ 제1항에 따른 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다. 이 경우 개인정보 보호법 시행규칙 별지 제11호 서식에 따른 위임장을
제출하셔야 합니다.
5. 제3자에게의 개인정보 제공
① (주)에이치앤에스 웹사이트는 다음의 개인정보 항목을 처리하고 있습니다.
<민원사무 처리>
– 필수항목 : 이름, 휴대전화번호, 자택전화번호, 이메일, 서비스 이용 기록, 접속로그, 쿠키, 접속IP 정보
6. 개인정보의 파기
(주)에이치앤에스 웹사이트는 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.
  • –파기절차 이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.-파기기한이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.
  • –파기방법 전자적 파일 형태의 정보는 기록을 재생할 수 없는 기술적 방법을 사용합니다. 종이에 출력된 개인정보는 분쇄기로 분쇄하거나 소각을 통하여 파기합니다.
7. 개인정보의 안전성 확보 조치
(주)에이치앤에스 웹사이트는 개인정보보호법 제29조에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 및 물리적 조치를 하고 있습니다.
1. 정기적인 자체 감사 실시
개인정보 취급 관련 안정성 확보를 위해 정기적(분기 1회)으로 자체 감사를 실시하고 있습니다.
2. 개인정보 취급 직원의 최소화 및 교육
개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다.
3. 내부관리계획의 수립 및 시행
개인정보의 안전한 처리를 위하여 내부관리계획을 수립하고 시행하고 있습니다.
4. 해킹 등에 대비한 기술적 대책
(주)에이치앤에스 웹사이트는 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 접근이 통제된 구역에
시스템을 설치하고 기술적/물리적으로 감시 및 차단하고 있습니다.
5. 개인정보의 암호화
이용자의 개인정보는 비밀번호는 암호화 되어 저장 및 관리되고 있어, 본인만이 알 수 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화 하거나 파일 잠금 기능을 사용하는 등의
별도 보안기능을 사용하고 있습니다.
6. 접속기록의 보관 및 위변조 방지
개인정보처리시스템에 접속한 기록을 최소 6개월 이상 보관, 관리하고 있으며, 접속 기록이 위변조 및 도난, 분실되지 않도록 보안기능 사용하고 있습니다.
7. 개인정보에 대한 접근 제한
개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여
외부로부터의 무단 접근을 통제하고 있습니다.
8. 문서보안을 위한 잠금장치 사용
개인정보가 포함된 서류, 보조저장매체 등을 잠금장치가 있는 안전한 장소에 보관하고 있습니다.
9. 비인가자에 대한 출입 통제
개인정보를 보관하고 있는 물리적 보관 장소를 별도로 두고 이에 대해 출입통제 절차를 수립, 운영하고 있습니다.
8. 개인정보 보호책임자 작성
① (주)에이치앤에스 웹사이트는 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를
지정하고 있습니다.
▶ 개인정보 보호책임자
성명 : 김진효
소속 : (주)에이치앤에스
전화번호 : 02-6402-8001
이메일 : hns@hnsts.co.kr
② 정보주체께서는 (주)에이치앤에스 웹사이트의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및
담당부서로 문의하실 수 있습니다. (주)에이치앤에스 웹사이트는 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.
9. 개인정보침해 구제방법
정보주체는 개인정보침해로부터 구제받고자 하는 경우 다음과 같은 기관에 도움을 요청할 수 있습니다.
▶ 개인정보 침해신고센터 (한국인터넷진흥원 운영)
– 소관업무 : 개인정보 침해사실 신고, 상담 신청
– 홈페이지 : privacy.kisa.or.kr
– 전화 : (국번없이) 118
– 주소 : (138-950) 서울시 송파구 중대로 135 한국인터넷진흥원 개인정보침해신고센터
▶ 개인정보 분쟁조정위원회 (한국인터넷진흥원 운영)
– 홈페이지 : privacy.kisa.or.kr
– 전화 : (국번없이) 118
– 주소 : (138-950) 서울시 송파구 중대로 135 한국인터넷진흥원 개인정보침해신고센터
10. 개인정보 처리방침 변경
① 이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할
것입니다.
팝업닫기

본 웹사이트에 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 수집되는 것을 거부하며, 이를 위반시 정보통신망법에 의해 형사처벌됨을 유념하시기 바랍니다.

게시일 : 2011.4.1