상세 컨텐츠

본문 제목

Delphi P2P Socket Library

RyuLib/RyuLib for Delphi

by 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로 원격지에서 오는 메시지가 얼마나 사라지는 지 확인하기 위해서 테스트로 만들었습니다.
  • 사용자 입장 및 퇴장 그리고 목록 보이기 등의 기능이 구현되어 있지만, 예제에 완전히 표현되지 않았습니다.  다음 커밋에 추가하도록 하겠습니다.



관련글 더보기