출처 : http://blog.naver.com/thefeel777/130097883405
1.
C# - 자동 업데이트 구현 (1. 설계)
1. 설계
구성은
업데이트 클라이언트 1
업데이트 리스트를 생성하는 클라이언트 1
UpdateClient 업데이트된 파일을 조사하여 로컬에 동기화시켜주는 역활을 할것이다.
Update 업데이트 할 파일을 리스트화 해주는 역활을 할것이다.
우선 Update 부터 보자
리스트 출력화면 이다.
파일의 경로, 용량, 수정 날짜가 있는것을 알수 있다.
경로는 전체 경로가 아닌 해당업데이트 파일들의 공통폴더(root)에서의 새부 항목으로 나눈다.
이작업을 해주며 서버에 FTP를 열어둔다.
ftp://111.111.111.111:21 이라는 서버를 예로둔다. 서버에는 아파치나, sunOne등을 사용할수 있을 웹서버나 아니면 OS를 서버군을 사용하여 구성해놓으면된다.
이유는 파일 업로드는 FTP방식을 이용할 것이며, 다운로드는 WebClient를 이용할 것이다.
WebClient를 사용해보면 알겠지만 정말로 간단하게 사용할수 있다.
또한웹서버를 이용함으로 사내방화벽이나 공유기문제등을 피할수 있다.80번포트가 막힐일은 없다. 간혹 21번 포트가 막히는 경우는봤어도. 그래서 클라이언트는 webClient를 이용하여 개발할 것이다. 실제로 웹서버를 이용한 자동업데이트 기능은 상당히 일반적인 방식중에 하나이다.
해당 리스트는 xml로 리스트가 저장될것이며, 이 데이터는 업데이트데이터가 필요로 하는 각 클라이언트에서 사용할것이다.
xml로 하는 이유는 일단 웹서버로 부터 바로 데이터를 읽어 올수 있으며 .net은 상당히 성능좋은 xml파서를 지원하기때문에 생상성도 높일수 있다.
위화면의 리스트를 xml라이트를 사용하여 출력해보자면
(첨부파일 확인) 노드 안에
즉 File안에 위 설명한 세가지의 (경로, 용량, 수정시간)정보가 차곡차곡 들어간다는것을 알수 있다.
아주 심플하다! 업데이트 파일의 정보를 읽어와서 경로와 용량 수정시간만 가져와 XML로 리스트화 하면 되는것이다.
아주 간단한 방법이니 걱정하지마시길..
다음은 Client딴이다.
서버에는 위 Update로부터 업로드해놓은 파일들이 존재할것이다.
위 파일에 리스트가 가장 중요한데.
클라이언트는 최초 위 작정해 놓은 xml파일을 webclient를 이용하여 읽어온다.
물론 xml parser를 이용하여 데이터를 읽어온다.
오픈하면 내용은 경로, 용량, 날짜가 있을것이다.
경로는 FTP상의 서브 디렉토리의 경로로 잡아주면 될것이고 용량과 수정날짜는 업데이트를 해야하는 데이터의 리스트 산출에 필요할것이다.
즉, WebClient를 이용하여 업데이트 리스트를 읽어오고 그 리스트에 맞게 데이터를 읽어오면 되는것이다.
말은 상당히 간단한데 코딩하는것또한 상당히 간단하다.
WebClient에 DownloadFileAsync와DownloadFile메서드를 이용하면된다.
MSDN에서는
publicvoidDownloadFileAsync(
Uri address,
stringfileName
)address
형식: System..::.Uri
다운로드할 리소스의 URI입니다.
- fileName
- 형식: System..::.String
로컬 컴퓨터에 저장할 파일의 이름입니다.
딱 두가지의 인자만 넣어주면된다.
즉, 파일을 받을 URI와 저장할 로컬의 경로만 정해주면된다.
또한 DownloadFileAsync를 이용하면
DownloadFileCompleted이벤트와
DownloadProgressChanged를 이용할수 있는데,
이 두가지의 이벤트를 보자면
DownloadProgressChanged는 다운 받는 도중 의 데이터 상태 이벤트
DownloadFileCompleted 다운이 완료되면 발생되는 이벤트 이다.
설명은 이제 된것같고
다음차에 소스를 하나씩 집어가며 확인해보자.
[출처] C# - 자동 업데이트 구현 (1. 설계) |작성자 카루다스
[출처] C# - 자동 업데이트 구현 (1. 설계) |작성자 카루다스
C# - 자동 업데이트 구현 (2. Create Update List & FTP Upload)
http://blog.naver.com/thefeel777/130097927583
'C#' 카테고리의 다른 글
[C#] C# WebBrowser version 변경 (0) | 2017.07.04 |
---|---|
[c#] Dataset 압축(Dataset Compress) (0) | 2017.03.02 |
[C#] ?. 연산자. (null check) (0) | 2017.01.24 |
[c#] 비밀번호 입력을 알파벳, 숫자, 특수문자로 제한하기 (0) | 2017.01.18 |
[c#] richtextbox에서 글 입력시 자동스크롤 하기 (0) | 2017.01.13 |