Super Chatting 0.82 - 'SuperSocket'과 'ClientEngine'를 이용한 Client/Server
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