유니티 엔진 - 게임 프로젝트/데디케이트 기반 모바일 게임

프로젝트 세팅 - 2) LiteNetLib를 활용한 클라이언트 + 서버 구현

monstro 2025. 11. 4. 14:50
728x90
반응형

- 개요

LiteNetLib 라이브러리를 사용하여 클라이언트와 서버간의 네트워크 통신을 구현한다

 

- 서버 사이드

1) NetworkServer 클래스

 

INetEventListener 인터페이스를 상속받아 네트워크 이벤트를 처리하기 위한 동작을 정의한다

 

 

멤버변수는 위와 같다

NetManager네트워크 통신을 총괄하는 매니저를 의미한다

_connections 멤버변수는 딕셔너리 연결된 상대방의 IDKey,

실제 연결된 상대방을 의미하는 NetPeerValue로 저장한다

 

 

Start 함수의 로직은 위와 같다

NetManager 인스턴스를 생성하고, DisconnectTimeout을 설정하여 시간동안 패킷을 받지 못하면 연결을 해제한다

이후 NetManager 인스턴스를 통해 8888의 포트로 네트워크 통신을 시작한다

 

 

PollEvents 함수의 로직은 위와 같다

NetManager.PollEvents 함수는 네트워크 이벤트를 처리하기 위해 반드시 호출해야 한다

따라서 생성한 인스턴스를 통해 해당 함수를 호출한다

 

 

OnConnectionRequest 함수는 서버가 클라이언트로부터 접속을 요청받은 경우 호출하는 콜백 함수이다

클라이언트의 IP 주소와 포트 번호를 출력하고 접속을 승인한다

 

 

OnNetworkReceive 함수는 서버가 클라이언트로부터 데이터를 수신받은 경우 호출하는 콜백 함수이다

받은 데이터를 파싱하여 출력하고, 임시 코드를 사용하여 클라이언트로 전송한다

이때, ReliableOrdered를 사용하여 신뢰성을 보장 + 전송하는 데이터의 순서를 보장한다

 

 

OnPeerConnected 함수 클라이언트가 서버에 성공적으로 접속하면 호출하는 콜백 함수이다

접속한 클라이언트의 포트 번호 / IP 주소 / 아이디를 출력하고 _connections에 저장한다

 

 

OnPeerDisconnected 함수클라이언트가 서버에서 성공적으로 접속해제하면 호출하는 콜백 함수이다

접속해제한 클라이언트의 포트 번호 / IP 주소 / 아이디를 출력하고 _connections에서 제거한다

 

그 외의 나머지 추상함수는 함수정의만 진행한다

 

2) Program 클래스

 

1)에서 생성한 NetworkServer 클래스의 인스턴스를 생성하고, Start 함수를 호출한다

이후 무한반복문을 호출하여 0.015초 간격으로 네트워크 이벤트를 처리한다

 

- 클라이언트 사이드

1) NetworkClient 클래스

 

멤버변수의 구성은 위와 같다

  • NetManager : 네트워크 통신을 총괄하는 매니저
  • NetPeer : 현재 연결된 서버
  • NetDataWriter : 네트워크로 보낼 데이터직렬화하는 도구
  • NetworkClient : 고유한 Network 클래스의 인스턴스, 프로퍼티를 통해 반환

 

 

Awake 함수에서는 고유한 자기자신의 인스턴스를 유지하도록 설정한다

 

 

Start 함수에서는 Init 함수를 호출한다

Init 함수에서는 NetDataWriter 인스턴스와 NetManager 인스턴스를 설정한다

NetManager 인스턴스에서는 DisconnectTimeout을 설정하여 시간동안 패킷을 받지 못하면 연결을 해제한다

이후 NetManager 인스턴스의 Start 함수를 호출하여 네트워크 통신을 시작한다

 

 

Update 함수에서는 NetManager의 PollEvents 함수를 호출하여 네트워크 이벤트를 처리한다

 

 

Connect 함수에서는 NetManager의 Connect 함수를 호출하여 서버로 접속한다

같은 PC에서 실행하는 서버에 접속 + 8888로 포트 번호 설정 + 검증키 생략의 설정을 진행한다

 

 

SendServer 함수에서는 서버로 데이터를 파싱하여 전송한다

이때 ReliableOrdered를 사용하여 신뢰성을 보장 + 전송하는 데이터의 순서를 보장한다

 

 

OnNetworkReceive 함수는 클라이언트가 서버에서 데이터를 수신받은 경우 호출하는 콜백 함수이다

서버로부터 받은 데이터에서 널 문자를 제거하고 파싱하여 출력한다

 

 

OnPeerConnected 함수는 클라이언트가 서버성공적으로 접속했을 경우 호출하는 콜백 함수이다

접속한 서버의 포트번호와 IP 주소를 로그로 남기고, NetPeer를 접속한 서버로 설정한다

 

 

OnPeerDisconnected 함수는 클라이언트가 서버에서 성공적으로 접속해제했을 경우 호출하는 콜백 함수이다

접속해제한 서버의 포트번호와 IP 주소를 로그로 남기고, 캐싱한 서버를 null로 초기화한다

 

그 외의 나머지 추상함수는 함수정의만 진행한다

 

2) UI_Login 클래스

 

버튼 UI에 연결된 2개의 이벤트 함수를 위와 같이 수정한다

Connect 함수를 호출하여 서버에 접속하고, Send 함수를 호출하여 데이터를 서버로 전송한다

 

- 최종 실행 결과

 

728x90
반응형