그냥 코딩만 나열하면 될텐데 정말.. 말이 많다.
하여간.. 계속 진도를 나가자.
접속을 하면 Ready를 받고 앞에 4byte에 다가는 뒤에 들어갈 녀석의 사이즈를 담아서 보내자
물론.. 이건 일반적이고 우리는 참 무식하게 해보자. 이번에는 스트링을 가지고 해보자.
좀 황당하긴 해도 재미있지 않겠는가?
통신의 규칙은 스스로 만드는것이란걸 보여주고 싶다.
그럼.. 자 어떻게 해볼까. 10바이트에 내가 보낼 사이즈를 보내준다고 생각해보자.(말도 안되는 이야기 이긴하다)
예를 들어서 내가 보낼 사이즈가 56789 란 사이즈라면.. 0000056789 라고 보내줘야 될것이다.
그러기 위해서 PadLeft를 사용해서 빈곳에 0을 채워주겠다.
(이런방식은 실제적인 통신프로그램에서 사용되지 않는다고 확신한다. 매우 비효율적인듯 싶다.)
앞서 이야기 했듯이 버퍼에 정보가 들어가는 입장이므로 사이즈를 받고 공간을 마련해서 뒷쪽의 정보를 받는 찰라의 순간에 데이터가 날러갈지 잘못될지 걱정하지 마라.
자.. 사이즈를 보내고 바로 정보를 보내면 된다.
여지없이 잘 온다. 사이즈는 1555라는 이야기고 이제 서버와 클라이언트의 소스를 보자.
앞서 시리얼 라이징은 지겹게 했으니 잘 알것이다.
클라이언트에서 보내는 코드이다.
MemoryStrem에 개체를 넣고 바이트로 넘겨줬다.
그럼 그것을 받는 서버는
간단하다. 이런 간단루틴만으로 우리는 실제적인 dictionary에 있는 각종정보
예를 들어서
아이디 / 패스워드 / 기준날짜 등등..을 아주 손쉽게 전송할수 있게되는것이다.
자 이정도 했다면 이제 우리는 앞서 우리가 정의했던 기본적인것의 처리를 한듯 싶다. 이제 이 정보를 가지고 로그인에 대한 설정은 스스로 하기로 하고 난 무조건 ok라고 생각하기로 하고
클라이언트에게 정보를 보내야 하는것이다.
4byte를 기준으로 good이라고 보내면 그 뒤로 기준데이타를 가지고 업데이트할 정보를 보내주고 fail 이라고 보내면 클라이언트는 업데이트할것이 없다고 생각하고 종료를 하자.
위와 동일한 수순을 처리하면..
손쉽게 클라이언트에서 서버에서 제공하는 데이타셋을 받아온것을 볼 수 있다.
뒤에 filedata라는 바이너리까지 정상적으로 받아온다.
앞서 적은것은 일단 이론적인것을 설명하기 위한것이니 기본적 참고만 하고
이제 전체 소스를 적어보도록 하자.
일단은
이 함수들은 클라이언트에도 그리고 서버에도 있는 공통함수로서 TCP의 버퍼에 있는정보를
가져오는 함수이다.
이걸 제외한 클래스를 보자.
먼저 서버는
EachByClass는 접속자마다 인스턴스가 생기는것으로
접속자마다의 쓰레드가 도는상태내에서 통신의 핸드쉐이킹(?)적인 형태의 신호를 주고 받고 그런다음 클라이언트에서 주는 정보를 기준으로 쿼리를 날려서 이 데이타셋을 클라이언트에게 전송해준다.
다수의 클라이언트가 접속했다는 가정내에서 테스트 해본 화면이다.
클라이언트의 경우는..
이런 형태의 모습을 지닌다.
자 이제는.. 마지막으로 DS 를 가지고 하드에 저장만 하면 된다.. ^^ 별 어려울게 없을듯 싶다.
아 프로그래스바? 그거야 쉽지 않는가.
조금 융통성 있게 구성해도 좋지만.. 귀차니즘으로 쉽게 하자면
이렇게 두줄만.. 적어주면.. 된다.
'C# 자동업그레이드' 카테고리의 다른 글
자동업그레이드 10 (0) | 2008.12.02 |
---|---|
자동업그레이드 9 (0) | 2008.12.02 |
자동업그레이드 8 (0) | 2008.12.02 |
자동업그레이드 7 (0) | 2008.12.02 |
자동업그레이드 5 (0) | 2008.12.02 |
자동업그레이드 4 (0) | 2008.12.02 |
자동업그레이드 3 (0) | 2008.12.02 |
자동업그레이드 2 (0) | 2008.12.02 |
자동업그레이드 1 (0) | 2008.12.02 |