RyuLib/RyuLib for Delphi
Delphi P2P Socket Library
ryujt
2017. 4. 5. 11:48
소스는 아래 링크에서 받으시면 됩니다.
사용의 예제는 SuperSocket\Delphi\Samples\P2P UDP 폴더에 서버와 클라이언트를 참고하시면 됩니다.
제가 진행했었던 1:1 온라인 강의 시스템에 사용했던 소스 일부를 새로 정리해 본 것입니다. 예전 소스를 거의 무시한채 새로 만들었기 때문에 버그가 많을 수 있습니다. 이슈에 남겨주시면 틈틈히 고쳐 나가겠습니다.
기본적으로 UDP를 이용해서 P2P로 패킷을 전송하지만, P2P로 보낼 수 없는 상황이되면 TCP를 이용해서 서버를 통해 릴레이를 하게 되어 있습니다.
원래는 1:1 서비스에서 사용했지만 n:m 상황에서도 사용할 수 있도록 수정했습니다. 기본적인 로그인 처리 및 사용자 처리 등의 패킷이 정의 되어 있습니다.
- 서버
- UDP 홀펀칭을 위해서 외부 주소 및 포트를 전달하기 위한 게이트웨이 역활
- UDP 홀펀칭이 실패하면 서버가 TCP로 릴레이로 전달하는 기능
- 클라이언트
- 접속, 로그인, 패킷 전송
자세한 사용법은 기회가 될 때 온라인이나 오프라인 강의로 진행하도록 하겠습니다.
예제를 컴파일 하시면 SuperSocket\Bin 폴더가 생기면서 실행 파일 두 개가 생성됩니다. 우선 P2P_Server.exe를 실행하고, Client.exe를 두 번 실행합니다.
Client.exe 실행 화면
- 상단 왼쪽에 서버 주소를 입력합니다.
- 127.0.0.1이 기본 설정되어 있습니다.
- Room-01에 방 이름을 입력합니다.
- 동시에 여러 강의실(대화실)을 개설하기 위해서 사용했습니다.
- 저는 실적용에서 랜덤한 긴 문자열을 사용했습니다.
- User-A에 사용자 아이디를 입력합니다.
- 암호 처리는 서버 소스를 참고해서 추가하셔야 합니다.
- 같은 방에 같은 아이디로 접속하면 기존의 아이디가 로그아웃 됩니다. 이를 클라이언트에서 신호를 받아 접속을 끊어야 하는데, 지금보니 해당 처리가 빠져있네요. 다음 커밋에서 추가하도록 하겠습니다.
- Connect 버턴을 클릭하고, Login 버턴을 클릭하면 됩니다.
- 가장 긴 빈 에디터에서 메시지를 입력하고 리턴하면 접속 된 사용자에게 모두 메시지를 보냅니다.
- Start 버턴을 누르면 연속되는 숫자를 계속 보냅니다. 혹시 하나라도 누락이 되면 현재 숫자가 표시됩니다.
- UDP로 원격지에서 오는 메시지가 얼마나 사라지는 지 확인하기 위해서 테스트로 만들었습니다.
- 사용자 입장 및 퇴장 그리고 목록 보이기 등의 기능이 구현되어 있지만, 예제에 완전히 표현되지 않았습니다. 다음 커밋에 추가하도록 하겠습니다.