기타 프로젝트/공개 프로그램

Super Chatting 0.82 - 'SuperSocket'과 'ClientEngine'를 이용한 Client/Server

당근천국 2015. 1. 1. 15:00

Super Chatting 0.82 - 'SuperSocket'과 'ClientEngine'를 이용한 Client/Server

 

SuperSocket_Chatting_20150101.zip

 

 

 

Author  : Dang-Gun Roleeyas ( http://blog.danggun.net/ )
Create date : 2014.12.31
License  : Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)

 

'SuperSocket'과 'SuperSocket - ClientEngine'을 이용한 채팅 클라이언트/서버 예제입니다.

슈퍼소켓(SuperSocket)은 '.Net'으로 구현된 서버 프레임웍입니다.

(참고 : SuperSocket - http://www.supersocket.net/)

클라이언트엔진(ClientEngine)은 '.Net'으로 구현된 슈퍼소켓기반 클라이언트 프레임웍입니다.

(참고 : SuperSocket ClientEngine - http://clientengine.codeplex.com/)

 

이전에 만든 비동기 Client/Server 프로그램을 이용하여 만들었습니다.

(참고 : 'SuperSocket'과 'ClientEngine'를 이용한 채팅(Chatting) Client/Server 예제 0.7 )

 

 

1. 주요기능

- 비동기 TCP 통신
- 다중 유저 채팅(Chatting)

- 파일 전송(큰메시지 포함)

2. 구조
2-1. 로그인 구조

ID_Check : 소켓을 연결한후 서버한테 ID가 유효한지 확인요청을 합니다.

ID_Check_Ok, ID_Check_Fail : ID가 유요하면 'ID_Check_Ok'를 유효하지 않으면 'ID_Check_Fail'를 보냅니다.

Login : 아이디가 유효하다면 해당 아이디로 접속요청을 합니다.

Login_Complete : 서버에서 로그인 요청이 완료되었다고 알립니다.

2-2. 파일(큰메시지) 전송 구조

 

LargeData_Start : 보내는 쪽에서 파일의 정보를 만들어 받는 쪽에 받을 준비를 하라고 요청 합니다.

LargeData_Info : 받는 쪽에서 받을 준비가 완료되었음을 알리면서 보낼때 사용할 인덱스를 보내줍니다.

LargeData_Receive : 보내는 쪽에서 1조각의 'dataSend'를 전송합니다.

LargeData_Receive_Complete : 받는 쪽에서 1조각의 'dataSend'를 받았다고 보내는 쪽에 알립니다.

LargeData_End : 모든 조각이 보내졌으면 받는쪽에 모든 데이터를 전송했다고 알립니다.

 

- 파일을 보낼때는 2가지 방식이 있습니다.

한번에 다 보내기, 받는쪽 완료후 보내기

 

모든 조각을 한번에 보내면 메시지가 꼬이는 문제가 있을 수 있습니다.

('SocketAsyncEventArgs'에서도 같은 문제가 있습니다.)

그래서 받는쪽의 확인후 보내는 방식을 기본으로 사용합니다.

 

- 큰메시지는 메모리에 임시저장된다.

큰메시지를 보내면 모든 데이터가 올때까지 받는쪽 메모리에 저장됩니다.

그러므로 받는쪽 메모리 관리가 필수입니다.

 

나중에 하드에 저장하는 방식도 추가할 예정입니다.

 

3. 수정 이력

 

2015.01.01

- 패킷을 무조건 인코딩하여 문자열(string)로 처리하던 방식에서 바이트어레이(byte[])를 잘라서 사용하는 방식으로 변경

- 큰메시지(파일 포함) 전송 추가

 

2014.09.30

 

- 예제 개발 완료

참고 : 'SuperSocket'과 'ClientEngine'를 이용한 채팅(Chatting) Client/Server 예제 0.7