[C#] 파일 다운로드 시스템 - 서버 통신 모듈

개발 노트/C#  2013.02.28 09:00

 

안녕하세요 명월입니다.

 

이번 포스팅에서는 정말 서버에서 일어나는 함수 플로우와 프로토콜에 대해 알아 보도록 하겠습니다.

 

 

초기화 할때 잠시 살펴 보긴 했습니다만 서버시작 버튼을 누르면 서버 스레드가 시작되는 부분은 여기있습니다.

 

 

위 스레드를 시작하면 시작되는 함수 영역입니다.

서버 포트는 9500 에서 열리겠습니다. 그리고 MainSetTest 부분은 버튼 아래에 있는 RIchTextBox에 로그를 남기는 부분이기에 가볍게 넘어가도록 하겠습니다.

 

그외에 보이는 함수는 Accept() 가 보이겠습니다. 즉, 클라이언트 대기상태에 들어가는 것이네요. 클라이언트가 연결 되면 Protocal 이라는 함수를 부르고 DataSend()라는 함수를 호출하고 다시 Protocal 함수를 부르고 서버를 종료하겠습니다.

 

그럼 Protocal 함수에 대해 조금 더 자세히 열어 보지요.

 

 

자 다시 Protocal 함수 내용을 보면 Start 던 End 던 메시지를 보내서 응답 내용이 OK 가 떨어지면 True 그 외에는 False 를 리턴하는 함수네요.

중간 중간 Properties 내용을 찾네요 확인 해 보도록 하겠습니다.

 

 

위와 보시는 것처럼 전문이 설정 되어있습니다.

 

이번엔 DataSend 함수를 살펴 보도록 하겠습니다.

 

 

Datasend 함수는 경로 텍스트 박에서 쓰여 있는 부분을 가져와서 전송 파일의 갯수를 확인하여 클라이언트에게 전송합니다. 그리고 FileSend 함수를 갯수만큼 호출하고 호출이 끝나면 매번 Recieve를 받고 OK Send 를 보냅니다.

 

그럼 FildSend 함수를 확인 해 보도록 하겠습니다.

 

 

이제 파일을 전송하는 부분이네요. 이 프로젝트의 핵심 중의 하나겠네요.

먼저 파일이름을 취득하여 전송합니다. DataDecoding 은 앞에 xml 형식의 노드를 형성하는 함수입니다.

 

그리고 전체 파일 사이즈를 보냅니다.

(참고 사항 소켓은 메시지 길이를 모르면 큐 형식이기 때문에 메시지가 밀리는 현상이 있습니다.)

 

그리고 파일을 4096 단위로 나누어서 파일을 전송하네요.. 꼭 4096으로 전송할 필요는 없는데 이 전송 값이 너무 커버리면 오버플로우가 발생할 수 있으니 적당이 합시다. 그리고 전송 단위가 크면 아주 약간은 빨라 질수 있습니다.

 

 

마지막으로 확인해 보겠습니다.

서버는 먼저 버튼이 눌리면 스레드가 시작되고 Accept 도 대기 상태에 빠집니다.

그리고 접속이 되면 Protocal 메시지 를 보내고 확인 받은 다음 비로써 파일 이름과 파일 사이즈 파일을 전송하겠습니다.

 

그럼 다음 포스팅에서는 반대 개념인 클라이언트에서 파일을 다운로드 받는 부분을 알아보도록 하겠습니다.

 

 


댓글 0개가 달렸습니다.
댓글쓰기